栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

python多线程服务器

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python多线程服务器

您有两个系统吗?服务器系统的IP地址是否为192.168.1.1?如果只有一个系统,则本地主机地址为127.0.0.1。那是我必须对您的代码进行的第一个更改,以便在同一系统上运行服务器和客户端时获得连接。

另一个问题是您的客户端线程实际上并未启动。由于需要客户端线程类,因此下面是声明和启动它的方法:

  1. threading.Thread的子类。
  2. 重写
    __init__
    您的行为,但首先调用
    __init__
    基类。
  3. 覆盖
    run
    线程工作。
  4. 创建一个实例并调用其
    start
    方法。

另一个问题是

recv
如果客户端未发送任何数据,则会阻塞,因此,如果您尝试连接多个客户端,则它将挂在客户端列表的循环中。您将需要每个客户端一个线程,或用于
select.select
查询客户端套接字以进行读/写准备。

以下是更改后的代码,只有一个客户端可以响应,但是需要处理多个客户端。它还需要建立协议来处理消息。TCP是一种流协议(无消息边界),因此发送“ abc”和“
123”可能会导致接收到“ abc123”或“ ab”和“ c123”等。它必须处理关闭连接并从客户端列表中删除客户端对象。

祝好运!您将学到很多知识,从头开始研究如何做所有这些事情。

socketserver.py
还要查看库中的示例代码。

srv.py

import socketimport threadingimport structimport stringclass clientThread(threading.Thread):    def __init__(self, serv):        threading.Thread.__init__(self)        self.server = serv        self.clientList = []        self.running = True        print("Client thread created. . .")    def run(self):        print("Beginning client thread loop. . .")        while self.running: for client in self.clientList:     message = client.sock.recv(self.server.BUFFSIZE)     if message != None and message != "":         client.update(message)class clientObject(object):    def __init__(self,clientInfo):        self.sock = clientInfo[0]        self.address = clientInfo[1]    def update(self,message):        self.sock.send("Testamundo.rn".enpre())class Server(object):    def __init__(self):        self.HOST = 'localhost'        self.PORT = 22085        self.BUFFSIZE = 1024        self.ADDRESS = (self.HOST,self.PORT)        self.clientList = []        input("Press enter to start the server. . .")        self.running = True        self.serverSock = socket.socket()        self.serverSock.bind(self.ADDRESS)        self.serverSock.listen(2)        self.clientThread = clientThread(self)        print("Starting client thread. . .")        self.clientThread.start()        print("Awaiting connections. . .")        while self.running: clientInfo = self.serverSock.accept() print("Client connected from {}.".format(clientInfo[1])) self.clientThread.clientList.append(clientObject(clientInfo))        self.serverSock.close()        print("- end -")serv = Server()

clnt.py

import socketimport stringaddress = ('localhost',22085)mySocket = socket.socket()mySocket.connect(address)print("Connected successfully!")mySocket.send('blah'.enpre())print(mySocket.recv(1024))

输出(srv.py)

Press enter to start the server. . .Client thread created. . .Starting client thread. . .Beginning client thread loop. . .Awaiting connections. . .Client connected from ('127.0.0.1', 52850).

输出(clnt.py)

Connected successfully!b'Testamundo.rn'


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/625350.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号