关于python socket 主动关闭链接 的问题
我client端先发送12个字节长度的固定传, 然后再发送24个字节的 字符串, server端第一次接收是正确的, 也返回给client端数据了, 可第二次client发送数据的时候, 就发送不过去了, server端也没反应, 什么数据也没收到, 请各位达人帮忙看下, 我怀疑是server端主动关闭链接了, 如何让server端不关闭链接呢 多谢
代码如下, 麻烦看下怎么解决, 多谢:
import socket
import select
import sys
import struct
HeaderFormat = "!8sI*1s"
IP = '192.168.0.101'
PORT = 10086
def sendAll(sock, packet, timeout= -1):
if timeout < 0:
timeout = 10
try:
size = 0
while size < len(packet):
if len(select.select([], [sock, ], [], timeout)[1]) <= 0:
return False
thesize = sock.send(packet[size:])
if thesize <= 0:
return False
size += thesize
return True
except:
return False
def recvAll(sock, size, timeout= -1):
if timeout < 0:
timeout = RecvTimeout
try:
res = ""
while size > len(res):
if len(select.select([sock, ], [], [], timeout)[0]) <= 0:
return False
buff = sock.recv(size - len(res))
if len(buff) <= 0:
return False
res += buff
return res
except:
return False
if __name__ == '__main__':
#socket.setdefaulttimeout(timeout)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind((IP, PORT))
sock.listen(5)
while True:
try:
usock,address = sock.accept()
except socket.error, e:
print 'Strange error begin to accept:%s' % e
continue
try:
rcv_header = ''
RecvHeaderFormat = "!8sI"
HeaderSize = 12
BodyFormat = "!*1s"
recv_body = ''
rcv_header = recvAll(usock, HeaderSize)
if rcv_header == False :
print 'recv header err'
usock.close()
continue
h_sign, body_size = struct.unpack(RecvHeaderFormat, rcv_header)
recv_body = recvAll(usock, body_size)
if recv_body == False:
print 'recv body err'
usock.close()
continue
recv_body = struct.unpack(createFormat(BodyFormat, body_size), recv_body)
s_hder = 'VIDEOLOG'
u_data = 'adsfjlsjdlfjsldjflsdjflsjdflj'
s_body_len = len(u_data)
packet = struct.pack(createFormat(HeaderFormat, s_body_len), s_hder, s_body_len, u_data)
if not sendAll(usock, packet):
print 'send data to network server failed'
continue
except:
print 'recv error'
continue