多线程同时, 接收与发送tcp消息
时间: 2023-11-25 17:07:56 浏览: 40
可以使用Python中的`threading`模块来实现多线程同时接收与发送TCP消息。具体实现步骤如下:
1. 创建一个`socket`对象,并绑定到本地端口上,等待客户端连接。
```python
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 8888))
server_socket.listen(5)
```
2. 创建一个线程函数来处理客户端的请求。
```python
import threading
def handle_client(client_socket):
while True:
data = client_socket.recv(1024)
if not data:
break
client_socket.send(data)
client_socket.close()
```
在这个线程函数中,我们通过`recv()`函数接收客户端发送过来的数据,并使用`send()`函数将数据发送回客户端。如果客户端关闭了连接,我们就退出循环,并关闭客户端套接字。
3. 在主线程中,使用`accept()`函数接受客户端连接,并创建一个新的线程来处理客户端请求。
```python
while True:
client_socket, client_address = server_socket.accept()
print('New connection from', client_address)
client_thread = threading.Thread(target=handle_client, args=(client_socket,))
client_thread.start()
```
每当有一个新的客户端连接进来,我们就打印一条信息,并创建一个新的线程来处理这个客户端的请求。新线程的目标函数就是我们前面定义的`handle_client()`函数。
完整的代码如下:
```python
import socket
import threading
def handle_client(client_socket):
while True:
data = client_socket.recv(1024)
if not data:
break
client_socket.send(data)
client_socket.close()
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 8888))
server_socket.listen(5)
while True:
client_socket, client_address = server_socket.accept()
print('New connection from', client_address)
client_thread = threading.Thread(target=handle_client, args=(client_socket,))
client_thread.start()
```
这个服务器程序可以同时处理多个客户端请求,每个客户端都会在独立的线程中被处理。注意,在真实的生产环境中,我们需要考虑一些线程安全的问题,比如共享资源的竞争问题等。