如果服务器关闭连接Python客户端断开连接(Python client disconnect if

2019-10-21 07:17发布

我有服务器和客户端的代码在Python,其中客户端发送请求消息发送到服务器,并等待响应。 我有服务器代码以关闭连接时,客户端不发送一个适当的请求。 当服务器关闭请求,客户端仍然是永远监听响应。

下面是代码

server.py

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host, port))

s.listen(1)

while True:

  c, addr = s.accept()

  # Receive request
  data = c.recv(1024)
  if data != 'something'
    c.close()
  else
    c.sendall("message"+"End")
    c.close()
s.close()

Client.py

End='End'
def recv_end(the_socket):
  # Snippet from http://code.activestate.com/recipes/408859-socketrecv-three-ways-to-turn-it-into-recvall/
  total_data=[];data=''
  while True:
    data=the_socket.recv(8192)
    if End in data:
      total_data.append(data[:data.find(End)])
      break
    total_data.append(data)
    if len(total_data)>1:
      #check if end_of_data was split
      last_pair=total_data[-2]+total_data[-1]
      if End in last_pair:
        total_data[-2]=last_pair[:last_pair.find(End)]
        total_data.pop()
        break
  return ''.join(total_data)

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host, port))

s.send("some_request")
data = s.recv_end(1024)
print "<---- " + str(data)

s.close()

我是新来的蟒蛇,不知道是否有客户端知道服务器关闭了连接和终止的方式。

我明白,如果我正常使用的客户端将断开s.recv(1024) 但对我来说,我需要大量的数据发送到客户端,所以我使用了不同的功能,我从发现http://code.activestate.com/recipes/408859-socketrecv-three-ways-to-turn-it-成-recvall / 。

是不是像服务器的连接,我的情况,并在接近过程中发送一个空字符串的答复,它会发送一个空字符串没有结束限制,因此客户端永远听吗?

Answer 1:

当你有一个循环recv或任何从套接字或管道读取数据,你应该停止尽快阅读你得到一个缓冲带LEN 0:

while True:
    data=the_socket.recv(8192)
    if len(data) == 0: break
    ...


文章来源: Python client disconnect if server closes connection