socket 线程接收
时间: 2023-08-25 10:07:40 浏览: 43
在使用 Socket 进行网络编程时,我们通常会使用多线程来实现同时接收和发送数据的功能。具体实现步骤如下:
1. 创建一个 Socket 对象并绑定 IP 地址和端口号;
2. 创建一个线程用于接收数据,利用该 Socket 对象的 recv() 方法来接收数据,并将其存储到一个缓冲区中;
3. 创建一个线程用于发送数据,利用该 Socket 对象的 send() 方法来发送数据,发送的数据可以来自于一个输入框或者是一个缓冲区;
4. 确保接收和发送线程都能够在需要的时候退出。
下面是一个简单的示例代码:
```python
import threading
import socket
def receive_thread(sock):
while True:
data = sock.recv(1024)
if not data:
break
print("Received: ", data)
def send_thread(sock):
while True:
data = input("Enter data to send: ")
sock.send(data.encode())
if __name__ == "__main__":
HOST = 'localhost'
PORT = 8000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print("Connected by", addr)
recv_thread = threading.Thread(target=receive_thread, args=(conn,))
send_thread = threading.Thread(target=send_thread, args=(conn,))
recv_thread.start()
send_thread.start()
recv_thread.join()
send_thread.join()
conn.close()
```
在上面的代码中,我们首先创建了一个 Socket 对象并绑定了本地的 IP 地址和端口号。然后在 accept() 方法中接受来自客户端的连接请求,并返回一个新的 Socket 对象和客户端的地址。接下来,我们创建了两个线程,一个用于接收数据,一个用于发送数据。在这两个线程中,我们都需要使用到 accept() 返回的 Socket 对象。最后,我们等待这两个线程结束并关闭连接。