zoukankan      html  css  js  c++  java
  • Python TCP 协议网络编程《四》

    今日主题:在Python TCP 协议网络编程《三》的基础上进行多线程的处理,可以让消息不断的发送不用等待回复后才可以继续发消息,同时也优化了服务端的代码,它主要是做消息的转发,实现多个客户端之间的消息互通。

    具体实现代码如下:


    server.py文件内容如下

     1from socket import socket,SOCK_STREAM,AF_INET #导入模块
     2from threading import Thread #导入线程包
     3
     4sockets=[] #用于存放所有请求过来的client的socket
     5
     6def tcp_server():
     7    tcp_server_socket=socket(AF_INET,SOCK_STREAM) #创建TCP服务端套接字对接,UDP是SOCK_DGRAM
     8    server_address=('127.0.0.1',9999)#定义本TCP服务端的ip and port
     9    tcp_server_socket.bind(server_address) #绑定本机的8888端口
    10    tcp_server_socket.listen(128) #设置监听,并设置最大等待连接数为128
    11
    12 while 1:
    13     print("i'm accepting")
    14     client_socket, client_info = tcp_server_socket.accept() # 接收客户端的socker and info
    15     print(client_socket,client_info)
    16     sockets.append(client_socket)
    17     t=Thread(target=get_msg,args=(client_socket,)) #开启线程来处理当前请求过来的client
    18     t.start()
    19
    20def get_msg(client_socket):
    21   while 1:
    22       data=client_socket.recv(1024)
    23       print("the data:",data)
    24       if(len(data)>0):
    25           for sk in sockets:
    26               print(sk,data)
    27               sk.send(data)
    28
    29
    30if __name__ == '__main__':
    31    print("the TCP server is running ...")
    32    tcp_server()

    client.py文件内容如下

     1from socket import socket,SOCK_STREAM,AF_INET #导入模块
     2from threading import Thread #导入线程包
     3import time
     4
     5tcp_client_socket = socket(AF_INET, SOCK_STREAM)  # 创建TCP客户端套接字对接
     6server_address = ('127.0.0.1', 9999)  # 定义本TCP服务端的ip and port
     7tcp_client_socket.connect(server_address)  # 连接到服务端
     8
     9def tcp_client():
    10    thread1=Thread(target=read_msg,args=(tcp_client_socket,))
    11    thread1.start()
    12
    13    thread2= Thread(target=send_msg, args=(tcp_client_socket,))
    14    thread2.start()
    15
    16def send_msg(tcp_client_socket):
    17    while 1:
    18        message=input(">>>")
    19        tcp_client_socket.send(message.encode("utf-8"))
    20        time.sleep(1)#这里稍微等一下发送的消息返回,否则会看到输入>>>标识的错位
    21
    22def read_msg(tcp_client_socket):
    23    while 1:
    24        resv_data = tcp_client_socket.recv(1024)
    25        print("the get of message is:",resv_data.decode("utf-8"))
    26
    27if __name__ == '__main__':
    28    print("the TCP client is running ...")
    29    tcp_client()

    client console output内容如下

    1the TCP client is running ...
    2>>>good good study
    3the get of message is: good good study
    4>>>day day up
    5the get of message is: day day up
    6>>>

    欢迎关注【无量测试之道】公众号,回复【领取资源】,
    Python编程学习资源干货、
    Python+Appium框架APP的UI自动化、
    Python+Selenium框架Web的UI自动化、
    Python+Unittest框架API自动化、

    资源和代码 免费送啦~
    文章下方有公众号二维码,可直接微信扫一扫关注即可。

    备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

     添加关注,让我们一起共同成长!

  • 相关阅读:
    树(三)——自平衡二叉树(AVL)
    树(二)——二叉树
    10. IDENTITY属性使用小结
    09. 约束与索引的联系
    08. 删除重复&海量数据
    07. 分页写法小结
    06. 父子节点(树)遍历写法小结
    01. SQL Server 如何读写数据
    05. 取SQL分组中的某几行数据
    04. 字符串合并与拆分写法小结
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/13906979.html
Copyright © 2011-2022 走看看