为什么python使用connect函数之后,recv和send前面的套接字发生了变化
时间: 2024-02-11 14:07:54 浏览: 70
Python实现简单的TCP套接字通信Demo【内含客户端和服务端,代码完整可直接使用】
在 Python 中,`socket` 对象的 `connect()` 函数实际上是在客户端 socket 上调用了 `connect()` 系统调用。这个系统调用会向服务器发起连接请求,如果连接成功,就会在客户端 socket 上创建一个新的文件描述符,用于与服务器进行通信。
这个新的文件描述符是与客户端 socket 绑定的,因此在调用 `recv()` 和 `send()` 函数时,需要使用这个新的文件描述符。如果使用旧的文件描述符,就会导致数据传输失败。
因此,在使用 `connect()` 函数之后,需要重新获取客户端 socket 的文件描述符,然后使用这个新的文件描述符进行数据传输。在 Python 中,可以通过 `socket.fileno()` 函数获取 socket 的文件描述符,示例代码如下:
```python
import socket
# 创建一个 socket 对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 定义服务器地址和端口号
server_address = ('127.0.0.1', 8080)
# 建立连接
client_socket.connect(server_address)
# 获取新的文件描述符
new_fd = client_socket.fileno()
# 发送数据
data = "Hello, World!"
client_socket.send(data.encode())
# 接收数据
recv_data = client_socket.recv(1024)
print(recv_data.decode())
# 关闭连接
client_socket.close()
```
在上面的代码中,我们在使用 `connect()` 函数之后获取了新的文件描述符,并使用这个描述符进行了数据传输。
阅读全文