最近学习python的tcp连接通信,这里是tcp服务器端,实现简单的接收多个客户端通信
import socket
from gevent import monkey
import gevent
monkey.patch_all()
# 创建客户端套接字
def tcp_socket():
# 建立新的客服务器套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置端口复用
tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
# 绑定端口
tcp_server_socket.bind(('', 8000))
# 设置套接字为被动状态,以及监听数
tcp_server_socket.listen(128)
print('等待连接:')
# 启用服务器套接字
server_start(tcp_server_socket)
def server_start(tcp_server_socket):
while True:
# 接收客户端的连接,accept()返回一个元组(新的客户端套接字,(客户端ip,客户端使用的端口)),用两个标识符接收。
new_client_socket, ip_port = tcp_server_socket.accept()
# 打印连接的客户端信息
print('新的连接建立,ip:{}, port:{}'.format(ip_port[0], ip_port[1]))
# recv_mes(new_client_socket, ip_port)
# 使用gevent模块创建协程,直接调用函数也可以
gevent.spawn(recv_mes, new_client_socket, ip_port)
def recv_mes(server_socket, ip_port):
while True:
# 接收与客户端连接的套接字发来的信息
recv_content = server_socket.recv(1024)
# 当没客户端下线时关闭套接字
if not recv_content:
print('断开连接{}'.format(ip_port))
server_socket.close()
return
else:
print('收到信息({}):'.format(ip_port) + recv_content.decode('gbk'))
# send_content = input('回复消息:').encode('gbk')
send_content = '收到消息'.encode('gbk')
server_socket.send(send_content)
def main():
tcp_socket()
if __name__ == '__main__':
main()
使用多个网络调试助手连接测试