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)
  • 相关阅读:
    css清除浮动
    vue在v-for循环中绑定v-model
    Element UI 数字输入框组件添加鼠标滚动事件
    vue-cli搭建vue开发环境
    vue组件通信
    H5新增的postMessage跨域解决方案Demo
    零碎方法笔记
    django中操作cookie与session
    python中装饰器修复技术
    django中orm的批量操作
  • 原文地址:https://www.cnblogs.com/leecoffee/p/9035544.html
Copyright © 2011-2022 走看看