zoukankan      html  css  js  c++  java
  • python网络编程(九)

    单进程服务器-非堵塞模式

    服务器

    #coding=utf-8
    from socket import *
    import time
    
    # 用来存储所有的新链接的socket
    g_socketList = []
    
    def main():
        serSocket = socket(AF_INET, SOCK_STREAM)
        serSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR  , 1)
        localAddr = ('', 7788)
        serSocket.bind(localAddr)
        #可以适当修改listen中的值来看看不同的现象
        serSocket.listen(1000)
        #将套接字设置为非堵塞
        #设置为非堵塞后,如果accept时,恰巧没有客户端connect,那么accept会
        #产生一个异常,所以需要try来进行处理
        serSocket.setblocking(False)
    
        while True:
    
            #用来测试
            #time.sleep(0.5)
    
            try:
                newClientInfo = serSocket.accept()
            except Exception as result:
                pass
            else:
                print("一个新的客户端到来:%s"%str(newClientInfo))
                newClientInfo[0].setblocking(False)
                g_socketList.append(newClientInfo)
    
            # 用来存储需要删除的客户端信息
            needDelClientInfoList = []
    
            for clientSocket,clientAddr in g_socketList:
                try:
                    recvData = clientSocket.recv(1024)
                    if len(recvData)>0:
                        print('recv[%s]:%s'%(str(clientAddr), recvData))
                    else:
                        print('[%s]客户端已经关闭'%str(clientAddr))
                        clientSocket.close()
                        g_needDelClientInfoList.append((clientSocket,clientAddr))
                except Exception as result:
                    pass
    
            for needDelClientInfo in needDelClientInfoList:
                g_socketList.remove(needDelClientInfo)
    
    if __name__ == '__main__':
        main()

    客户端

    #coding=utf-8
    from socket import *
    import random
    import time
    
    serverIp = raw_input("请输入服务器的ip:")
    connNum = raw_input("请输入要链接服务器的次数(例如1000):")
    g_socketList = []
    for i in range(int(connNum)):
        s = socket(AF_INET, SOCK_STREAM)
        s.connect((serverIp, 7788))
        g_socketList.append(s)
        print(i)
    
    while True:
        for s in g_socketList:
            s.send(str(random.randint(0,100)))
    
        # 用来测试用
        #time.sleep(1)
  • 相关阅读:
    RocketMQ源码 — 十、 RocketMQ顺序消息
    RocketMQ源码 — 九、 RocketMQ延时消息
    RocketMQ源码 — 八、 RocketMQ消息重试
    HDU3439 Sequence
    Cipolla算法学习小记
    BZOJ2286: [Sdoi2011]消耗战
    BZOJ4873 寿司餐厅
    BZOJ1718 [Usaco2006 Jan] Redundant Paths 分离的路径
    BZOJ1123 [POI2008]BLO
    BZOJ3996 TJOI2015线性代数
  • 原文地址:https://www.cnblogs.com/leecoffee/p/9035544.html
Copyright © 2011-2022 走看看