好的,我有一个套接字,我一次处理一行并记录它。下面的代码很适合。 cout函数是我用来将数据发送到日志的函数。我使用for循环,所以我可以一次处理一行。
socket.connect((host, port))
readbuffer = ""
while True:
readbuffer = readbuffer+socket.recv(4096).decode("UTF-8")
cout("RECEIVING: " + readbuffer) #Logs the buffer
temp = str.split(readbuffer, "\n")
readbuffer=temp.pop( )
for line in temp:
#Handle one line at a time.
我遇到了一个问题,当服务器断开我的时候,我突然间有一个大量的文件,其中包含了#34; RECEIVING:"。我知道这是因为当python套接字断开连接时套接字开始不断地接收空白数据。
我试过插入:
if "" == readbuffer:
print("It disconnected!")
break
所做的就是立即打破循环,并说它已断开连接,即使连接成功也是如此。
我也知道我可以通过发送数据来检测断开连接,但是我无法做到这一点,因为我发送的任何内容都会被广播到服务器上的所有其他客户端,这就是调试这些客户端所以我会干涉。
我该怎么办?先谢谢你。
答案 0 :(得分:2)
您需要分别检查recv()
与readbuffer
while True:
c = socket.recv(4096)
if c == '': break # no more data
readbuffer = readbuffer + c.decode("UTF-8")
...