gpt4 book ai didi

python socketserver连接超时

转载 作者:太空宇宙 更新时间:2023-11-03 11:27:56 24 4
gpt4 key购买 nike

我是 python 套接字编程的新手。我正在尝试创建一个简单的聊天应用程序我正在尝试将数据从客户端程序发送到服务器但是在服务器程序中接收数据时我遇到了“超时”

我的客户端程序-

import socket
PORT = 3017

def handler(req):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect(("localhost", PORT))
except socket.error, msg:
print("error connecting socket")
s = None
finally:
f.close()
s.settimeout(10.0)
s.send(req)
line = s.recv(1024)
s.close()
return line


if __name__ == '__main__':
while(1):
input = raw_input(">")
resp = handler(input)
print resp

我的服务器程序-

import socket
import SocketServer

class echo_server(SocketServer.StreamRequestHandler):
def handle(self):
timeout_telnet = float(2.0)
self.connection.settimeout(timeout_telnet)

data = []
# Read in all the lines.
while 1:
try:
line = self.rfile.readline()
except BaseException, e:
# Timeout.
print("error", e)
break
data.append(line)
print("data in handle method-\n", data)
self.wfile.write(("echo data- ".join(data)))
break

# Goodbye


def main():
s = SocketServer.ThreadingTCPServer(("", 3017), echo_server)
try:
s.serve_forever()
except KeyboardInterrupt:
print("Shutting down.")
s.socket.close()

if __name__ == "__main__":
main()

最佳答案

您的问题是因为您在使用流套接字时需要控制消息长度。

那里发生了什么:

您的客户端发送了一些数据(N 字节)。您的服务器从套接字读取数据,但它不知道您的“消息”是否完整或将发送一些额外的数据。

你能做什么?如果你要更换

self.rfile.readline()

使用 self.request.recv(10) - 您的服务器将读取 10 个字节并将它们发回。因此,您可以为服务器和客户端将要相互发送的消息设置一些消息大小。

这里还有一些有用的信息: https://docs.python.org/2/howto/sockets.html#using-a-socket

这是最简单的聊天示例:

客户

def handler(req):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("localhost", PORT))
message = req
s.send(req)
print s.recv(1024)
s.close()

服务器

def handle(self):
while True:
line = self.request.recv(1024)
if line:
print("data in handle method-\n", line.strip())
self.wfile.write(line)

但您以后可能会遇到一些问题,python 文档可以帮助您理解它是如何工作的。

关于python socketserver连接超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30226074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com