[英]How to send and receive message from client to client with Python (socket)?
[英]How to send and receive whole text message (not just a part) using socket
我正在嘗試使用SocketServer
創建一個非常簡單的(行)服務器。 我是這方面的新手,問題是我不知道如何處理recv
函數。 我不想發送文件或類似的東西。 僅來自客戶端的書面文本和來自服務器的響應可能更大(ipconfig等的輸出)
您能給我一個建議如何使它工作嗎?
當我想從服務器請求更長的時間時,例如ipconfig /all
,它將返回所需輸出的一部分給我的客戶端並等待。 如果作為客戶端執行新請求,它將返回前一個請求的其余輸出。
這是服務器:
class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
daemon_threads = True
class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
def handle(self):
while 1:
data = self.request.recv(1024)
output = process_command(data)
response = "{}".format(output)
self.request.sendall(response)
if __name__ == "__main__":
HOST, PORT = _host, int(_port)
server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
print "Running on: %s:%s" % (HOST, PORT)
server.serve_forever()
在該行中:
data = self.request.recv(1024)
1024是數據字符串可以包含的位數的限制器,因此1024位== 128字節== 128字符串。 將數字增加到4096,然后將限制增加到512。
有幾個問題。
recv
是一個低級功能,您可能會在幾個需要結合在一起的塊中收到TCP客戶端的輸入。 如果您的“協議”是面向行的,請使用makefile
創建類似文件的對象,然后可以使用readline
讀取整行。
問題可能出在process_command
,請顯示您的代碼。
您的循環不處理EOF(客戶端關閉)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.