首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中,如何在不关闭套接字连接的情况下连续发送数据?

在python中,如何在不关闭套接字连接的情况下连续发送数据?
EN

Stack Overflow用户
提问于 2016-08-15 17:24:51
回答 1查看 1.4K关注 0票数 0

我编写了一个python客户端来与服务器端进行通信。每次当我清理完数据时,我必须调用sock.shutdown(socket.SHUT_WR),否则服务器将不会进行任何响应。但是在调用sock.shutdown(socket.SHUT_WR)之后,我不得不将连接重新连接为sock.connect((HOST, PORT)),否则我无法将数据发送到服务器。所以,如果不关闭连接,我如何才能保持连接的活力。我的示例代码如下:

代码语言:javascript
复制
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST, PORT))
sock.sendall(data)
sock.shutdown(socket.SHUT_WR)
received = sock.recv(1024)
while len(received)>0:
    received = sock.recv(1024)
sock.sendall(newdata) # this would throw exception

服务器端代码如下:

代码语言:javascript
复制
def handle(self):
    cur_thread = threading.current_thread()
    while True:
        self.data = self.rfile.read(bufsiz=100)
        if not self.data:
            print 'receive none!'
            break
        try:
            data = self.data
            print 'Received data, length: %d' % len(data)
            self.wfile.write('get received data\n')
        except Exception:
            print 'exception!!'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-15 17:49:33

您没有显示任何服务器端代码,但我怀疑它只是读取字节,直到它不再显示。

您不能像您发现的那样做这件事,因为告诉服务器消息已经完成的唯一方法是关闭连接。

相反,您必须在协议中添加某种形式的框架。可能的方法包括服务器识别的指定停止字符(例如单个换行符,或者可能是0字节),发送客户端和服务器一致同意的固定大小的帧,或者首先以网络编码整数的形式发送帧大小,然后是指定的字节数。然后,服务器首先读取整数,然后从套接字中读取相同数量的字节。

这样,您就可以打开连接并发送多条消息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38959847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档