python socketserver连接时间OU

2024-03-29 09:19:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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}$

Tags: 应用程序closeinputport编程lineerrorsocket
2条回答

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

那里发生了什么:

你的客户机正在发送一些数据(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()

服务器

^{pr2}$

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

真正的问题是服务器等待从客户端发送更多的消息,这导致超时。我找到了一个有效的解决办法 在客户端程序中添加以下行

s.shutdown(1)

之后

^{pr2}$

并在服务器程序中替换

^{3}$

line = self.request.recv(1024)

shutdown(1)告诉服务器“此客户端已发送完毕,但仍可以接收。”

相关问题 更多 >