37,719
社区成员
发帖
与我相关
我的任务
分享
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