tcp客户端编程py

简介: tcp客户端编程py

image.png

image.png

import socket

target_host = "www.google.com"
target_port = 80  # 更正为 HTTP 服务的标准端口

# 创建一个 TCP 套接字
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接到目标主机和端口
client.connect((target_host, target_port))

# 发送数据
client.send("GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n")

# 接收数据
response = client.recv(4096)

print(response)

image.png

image.png

client.send(b"GET / HTTP/1.1\r\nHost:  www.google.com\r\n\r\n")

这行代码使用了之前创建的client套接字对象来发送一个HTTP请求到指定的服务器。下面是对这行代码的详细解释:

client.send():这是套接字对象的一个方法,用于发送数据到已经连接的服务器。

b"GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n":这是要发送的数据,是一个字节串(bytes literal)。在Python中,以b开头的字符串表示字节串,这在网络编程中很常见,因为网络传输通常是以字节流的形式进行的。

这个字节串实际上是一个HTTP GET请求的格式,具体如下:

GET / HTTP/1.1:这是HTTP请求的第一行,指定了请求的方法(GET)、请求的资源路径(/表示根目录)以及使用的HTTP协议版本(HTTP/1.1)。

\r\n:这是回车换行符,用于分隔HTTP请求的不同部分。

Host: www.google.com:这是HTTP请求头的一部分,指定了请求的目标主机名。在HTTP/1.1中,每个请求都必须包含一个Host头部,以指示请求应该被发送到哪个服务器。

\r\n\r\n:这是两个连续的回车换行符,用于结束HTTP请求头,开始HTTP请求体(在这个例子中没有请求体)。

因此,client.send(b"GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n")这行代码的意思是向已经连接的服务器发送一个HTTP GET请求,请求访问www.google.com的根页面。

请注意,这段代码假设client套接字对象已经成功连接到了www.google.com的服务器。如果套接字没有连接或者连接到了错误的服务器,这个请求将不会被正确处理。此外,由于这是一个简单的示例,它没有处理实际的HTTP通信中可能遇到的各种情况,比如错误处理、重定向、身份验证等。在实际的网络编程中,需要考虑更多的细节和异常情况。

image.png

这段代码是 Python 中使用 socket 模块的套接字对象来接收从远程主机发送过来的数据的示例。

client 是一个套接字对象,它是在之前的代码中通过 socket.socket() 函数创建的,并且已经使用 .connect() 方法连接到了远程主机。

.recv(4096) 是套接字对象的一个方法,用于接收来自远程主机的数据。4096 是传入的参数,表示最多接收的字节数。这是一个缓冲区大小,意味着一次调用 .recv() 最多可以接收 4096 字节的数据。如果远程主机发送的数据少于这个数量,.recv() 将返回实际接收到的数据量;如果数据量超过这个数量,.recv() 将只返回前 4096 字节的数据。

response 是一个变量,用于存储从 .recv() 方法返回的数据。这个数据通常是二进制格式的,除非你知道远程主机发送的是文本数据,否则你可能需要对其进行适当的解码。

print(response) 打印出接收到的数据。如果数据是文本格式,这将直接输出文本;如果是二进制数据,你可能需要先将其转换为可读格式,例如使用 response.decode('utf-8') 来解码为 UTF-8 编码的文本。

这段代码通常用在客户端程序中,用于接收服务器响应的数据。在服务器端,相应的套接字方法通常是 .send() 或 .sendall(),用于向客户端发送数据。

完整代码

import socket

target_host = "www.google.com"
target_port = 80  # 更正为 HTTP 服务的标准端口

# 创建一个 TCP 套接字
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接到目标主机和端口
client.connect((target_host, target_port))

# 发送数据
client.send("GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n")

# 接收数据
response = client.recv(4096)

print(response)


相关文章
|
5月前
|
网络协议 网络性能优化 Python
在Python中进行TCP/IP网络编程
在Python中进行TCP/IP网络编程
70 6
|
网络协议 Linux
【网络编程】基于TCP完成ECHO服务(更新)
【网络编程】基于TCP完成ECHO服务
|
8天前
|
网络协议 Python
Python创建一个TCP服务器
Python创建一个TCP服务器
13 0
|
5月前
|
网络协议 Python
python中TCP回声服务器与客户端示例
【4月更文挑战第7天】本示例展示了TCP回声服务器和客户端的工作流程。服务器监听特定端口,接收客户端连接请求,接收数据并回显。客户端连接服务器,发送数据并接收回显。代码示例用Python实现,包括服务器的`socket.bind()`, `socket.listen()`, `socket.accept()`和客户端的`socket.connect()`, `socket.sendall()`, `socket.recv()`。运行示例时,先启动服务器再启动客户端,可观察TCP连接和数据传输过程。了解这些基础对于构建网络应用至关重要。
|
5月前
|
网络协议 网络性能优化 Python
python怎么实现tcp和udp连接
python怎么实现tcp和udp连接
56 0
|
网络协议 Python
Python 网络编程3:tcp客户端与tcp服务器以及下载器
Python 网络编程3:tcp客户端与tcp服务器以及下载器
190 0
Python 网络编程3:tcp客户端与tcp服务器以及下载器
|
网络协议 Python
Python web服务器5: tcp-ip简介
Python web服务器5: tcp-ip简介
120 0
Python web服务器5: tcp-ip简介
|
网络协议 Python
python web开发 网络编程 TCP/IP UDP协议
python web开发 网络编程 TCP/IP UDP协议
261 0
python web开发 网络编程 TCP/IP UDP协议
|
网络协议 Python
Python socket 实现服务端和客户端数据传输(TCP)
服务器端 import socket #创建一个socket对象 socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = "127.