天天看點

單程序單線程,完成并發伺服器(基礎版)

# 單程序單線程,完成并發伺服器
from socket import *


def main():

    serverSocket = socket(AF_INET, SOCK_STREAM)
    serverSocket.bind(("", ))
    serverSocket.listen()

    serverSocket.setblocking(False)

    clientServerList = []

    while True:
        try:
            clientServer, clientAddr = serverSocket.accept()
        except Exception as e:
            pass
        else:
            clientServer.setblocking(False)
            print("用戶端:%s已連接配接" % str(clientAddr))
            clientServerList.append((clientServer, clientAddr))

        for clientServer, clientAddr in clientServerList:
            try:
                recvData = clientServer.recv()
            except Exception as e:
                pass
            else:
                if recvData:
                    print("%s:%s" % (str(clientAddr), recvData))
                else:
                    clientServer.close()
                    print("%s斷開連接配接" % str(clientAddr))
                    clientServerList.remove((clientServer, clientAddr))


if __name__ == '__main__':
    main()
           

基礎的版本,主要了解利用非堵塞的socket通信,非堵塞+for循環模拟多線程

注:

測試使用網絡調試工具就可以,這個可以多開。

代碼&工具下載下傳位址:

下載下傳位址1

下載下傳位址2