python简单的tcp服务器端

最近学习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()

使用多个网络调试助手连接测试

猜你喜欢

转载自blog.csdn.net/qq_39265082/article/details/82154870