我编写了一个python客户端来与服务器端进行通信。每次当我清理完数据时,我必须调用sock.shutdown(socket.SHUT_WR),否则服务器将不会进行任何响应。但是在调用sock.shutdown(socket.SHUT_WR)之后,我不得不将连接重新连接为sock.connect((HOST, PORT)),否则我无法将数据发送到服务器。所以,如果不关闭连接,我如何才能保持连接的活力。我的示例代码如下:
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服务器端代码如下:
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!!'发布于 2016-08-15 17:49:33
您没有显示任何服务器端代码,但我怀疑它只是读取字节,直到它不再显示。
您不能像您发现的那样做这件事,因为告诉服务器消息已经完成的唯一方法是关闭连接。
相反,您必须在协议中添加某种形式的框架。可能的方法包括服务器识别的指定停止字符(例如单个换行符,或者可能是0字节),发送客户端和服务器一致同意的固定大小的帧,或者首先以网络编码整数的形式发送帧大小,然后是指定的字节数。然后,服务器首先读取整数,然后从套接字中读取相同数量的字节。
这样,您就可以打开连接并发送多条消息。
https://stackoverflow.com/questions/38959847
复制相似问题