TCP网络程序实现

tcp网络程序-客户端

  • 实现步骤

    • 导入模块

    • 创建套接字

      socket.SOCK_STREAM

    • 建立连接

      tcp_client_socket.connect( (“服务端ip”, 服务端端口) )

    • 发送数据

      tcp_client_socket.send(“内容”.encode())

    • 接收数据

      recv_data = tcp_client_socket.recv(1024)

      recv_data 是接收到的数据的二进制

    • 关闭连接

tcp网络程序-服务器

  • 导入模块

  • 创建套接字

  • 绑定端口

  • 开启监听(把套接字由主动设置为被动模式)

    tcp_server_socket.listen(128) 最大允许128个连接

  • 等待客户端连接

    new_client_socket,client_ip_port = tcp_server_socket.accept()

    new_client_socket 新的套接字,只是服务当前的客户端

    client_ip_port 客户端端口和ip地址

  • 使用新的套接字接收客户端发送的信息

    new_client_socket.recv(1024)

  • 关闭新的套接字

    new_client_socket.close() 关闭和当前客户端的连接

  • 关闭服务器套接字

    tcp_server_socket.close() 服务器不再接收新的客户端,老客户端可以继续服务

tcp网络程序-服务器增强

  • 循环接收多条信息

    while True:
            # recv() 会让程序再次阻塞,收到信息后再接阻塞
            recv_data = new_client_socket.recv(1024)
            # 当接受到数据为 空 的时候,表示客户端已经断开连接了,服务端也要断开
            # if len(recv_data)!= 0:
            # b'xxxx'
            # 如果recv_data 非空即为真,否则为假
            if recv_data:
                recv_text = recv_data.decode("GBK")
                print("接收到[%s]的信息:%s" % (str(client_ip_port), recv_text))
            else:
                print("客户端已经断开连接!")
                break
    
  • 循环接受多个客户端连接

    while True:
    
        new_client_socket, client_ip_port = tcp_server_socket.accept()
        print("新客户端来了:%s" % str(client_ip_port))
        # 6、收发数据
        while True:
            # recv() 会让程序再次阻塞,收到信息后再接阻塞
            recv_data = new_client_socket.recv(1024)
            # 当接受到数据为 空 的时候,表示客户端已经断开连接了,服务端也要断开
            # if len(recv_data)!= 0:
            # b'xxxx'
            # 如果recv_data 非空即为真,否则为假
            if recv_data:
                recv_text = recv_data.decode("GBK")
                print("接收到[%s]的信息:%s" % (str(client_ip_port), recv_text))
            else:
                print("客户端已经断开连接!")
                break
        # new_client_socket.close() 表示不能再和当前的客户端通信了
        new_client_socket.close()
    

    注意:必须等待第一个客户端断开后,第二个客户端才能有机会连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值