python TCP多客户端连接

发布时间:2019-06-09 21:44:43编辑:auto阅读(1686)

    Python TCP服务端代码:
    # coding=utf-8
    # !/usr/bin/env python
     
     
    from socket import *
    from time import ctime
    import threading
    import time

    HOST = ''   #主机地址
    PORT = 3046  #端口
    BUFSIZ = 1024  #缓冲区大小
    ADDR = (HOST, PORT)  #地址及端口
     
    tcpSerSock = socket(AF_INET, SOCK_STREAM)   #创建一个TCP套接字
    tcpSerSock.bind(ADDR)       #绑定地址及端口
    tcpSerSock.listen(5)        #最大client连接数为5
    socks = []  # 放每个客户端的socket
    #创建一个遍历sock线程,接收数据
    def handle():
         while True:
             for s in socks:
                 try:
                     data = s.recv(BUFSIZ)  # 到这里程序继续向下执行
                 except Exception, e: #无接收异常捕获
                     #print "接收异常!";
                     continue
                 if not data: #无数据接收则移除该客户端引用
                     s.send('[%s],%s' % (ctime(), ""))  #断开连接之前需要响应客户端,否则客户端无法再次建立连接
                     info=s.getpeername()
                     print "客户端",info,"断开连接!"
                     s.close()   #断开该cilent连接

                    socks.remove(s) #从数组中移除该cilent连接引用
                     continue
                 s.send('[%s],%s' % (ctime(), data))  #有数据接收则返回数据
                 print data;
              
     
    t = threading.Thread(target=handle)  # 子线程
    if __name__ == '__main__':
         t.start()   #启动线程
         print 'waiting for connecting...'
         while True:  #循环监听连接
             clientSock, addr = tcpSerSock.accept() #等待client连接
             print  'connected from:', addr  #打印客户端地址及其端口信息
             clientSock.setblocking(0)   #之后就是非阻塞的
             socks.append(clientSock)  #保存该客户端引用到socks数组

    TCP工具做客户端连接测试:

     

    内网通截图20190601161350

    断开连接:

    内网通截图20190601161541

     

关键字