我是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
我的服务器程序-
^{pr2}$
您的问题是因为在使用流套接字时需要控制消息长度。在
那里发生了什么:
你的客户机正在发送一些数据(N字节)。 您的服务器正在从套接字读取数据,但它不知道您的“消息”是否已完成或将发送一些附加数据。在
你能做什么? 如果你愿意更换
与self.request.recv(10) -您的服务器将读取10个字节并将其发送回。因此,您可以为服务器和客户端将要发送的消息设置一些消息大小。在
这里还有一些有用的信息: https://docs.python.org/2/howto/sockets.html#using-a-socket
下面是最简单的聊天示例:
客户
服务器
^{pr2}$但是,以后可能会遇到一些问题,python文档可以帮助您理解它是如何工作的。在
真正的问题是服务器等待从客户端发送更多的消息,这导致超时。我找到了一个有效的解决办法 在客户端程序中添加以下行
之后
^{pr2}$并在服务器程序中替换
^{3}$与
shutdown(1)告诉服务器“此客户端已发送完毕,但仍可以接收。”
相关问题 更多 >
编程相关推荐