pyhton3高级,TCP服务器框架(TCP聊天器,多线程)

hello,大家好,上一篇文章刚和大家讲解过UDP的多线程聊天器.今天再带童鞋们学习一下TCP的多线程聊天器.

TCP,是一种面向有连接的数据传输协议.它具有可靠传输的优点:

1.应答机制:TCP发送的每个报文段都必须得到接收方得应答才认为这个TCP报文段传输成功

2.超时重发:发送端发出一个报文段之后,就启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段

3.错误校验:TCP会用一个校验的函数来检查数据是否有错误,在发送和接收的时候都会有校验

4.流量管控和防阻塞管理:流量控制用来避免主机因为消息发送过快而来不及完全接受

前几篇文章有TCP服务器的代码,今天咱们就加以修改,让这个程序变得更加完善

*******

提醒:咱们的代码都是在Linux系统下完成的,当你复制粘贴到windows系统下的时候可能会报错. 

*******

# 1.导入模块
import socket
import threading


# 7.发送信息,和接收信息
# 需要注意点:send_msg(传入两个参数,一个是套接字,一个是IP和端口的元组)
def send_msg(tcp_client_socket, tcp_ip_port):
    # 设置循环接收多条信息
    while True:
        # 8.接收消息(接收一个二进制内容)
        tcp_data_socket = tcp_client_socket.recv(1024)
        # 根据接收到的消息进行判断(当客户端断开连接时,会发送几次空白信息)
        # 判断是否为空,如果不为空则往里执行,否则执行else
        if tcp_data_socket:
            try:
                tcp_text = tcp_data_socket.decode()
            except:
                tcp_text = tcp_data_socket.decode("gbk")
                print("接收到新消息 : ", tcp_ip_port, ":", tcp_text)
            else:
                print("接收到新消息 : ", tcp_ip_port, ":", tcp_text)
            # 14.发送信息
            # 使用套接字.send() 发送信息,需要编码哟
            tcp_client_socket.send("test...测试TCP服务器反馈信息...test".encode())
        else:
            break
    # 9.关闭套接字
    tcp_client_socket.close()


def main():
    # 2.创建TCP套接字
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 3.设置端口重用
    tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    
    # 4.绑定端口
    tcp_server_socket.bind(("", 8080))
    
    # 5.进行监听
    tcp_server_socket.listen(128)
    
    # 10.设置循环,可以连接多个客户端
    while True:
        # 6.accept()等待客户端连接
        # accept() 返回两个元素,一个是套接字,一个是元组,元组内有(IP,端口)
        tcp_client_socket, tcp_ip_port = tcp_server_socket.accept()
        print("客户端已连接 : ", tcp_ip_port)
        # 11.创建子线程
        # 传递套接字和(IP,端口)到方法send_msg()中
        t1 = threading.Thread(target=send_msg, args=(tcp_client_socket, tcp_ip_port))
        # 12.设置线程守护
        t1.setDaemon(True)
        # 13.开始线程
        t1.start()


if __name__ == '__main__':
    main()

 

代码已经写好了,接下来运行咱们的代码,然后开启网络调试助手.

 

 

网络调试助手,将服务器的IP 和 端口都写好之后就可以开始测试了,

先提前运行服务器然后,服务器会进入阻塞状态,等待客户端的连接

 

 

客户端连接成功后,就可以开始互相发送信息,进行测试了

 

 

****************************

到这里咱们的代码包括测试以及完成了.

现在咱们的服务器,可以接受多个客户端的连接,同时能接收多个客户端的信息

非常感谢各位看官的支持.谢谢~~~❤

****************************

后续还会给大家更新更多的技术博客.

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值