我的客户端向服务器发送消息。服务器每次收集消息16 byte
,当它收到少于16 bytes
的消息时,它会将消息(连接后)返回给客户端。
以下是server.py:
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM,socket.IPPROTO_IP)
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
sock.bind(address)
sock.listen(1)
try:
while True:
conn,add=sock.accept()
addr=(conn,add)
print add
try:
data = ''
while True:
recvdata=conn.recv(16)
print recvdata
data+=recvdata
if len(recvdata)<16:
print >>log_buffer,"sending data"
conn.sendall(data)
break
finally:
conn.close()
except KeyboardInterrupt:
sock.close()
该代码适用于16以上且小于16 byte
长度的消息,当它正好是16或16的多个时,它不会发送回客户端。我该如何解决这个问题?
`
答案 0 :(得分:1)
你没有说明应该做什么,恰好是16的倍数。
您发布的代码不会将其发回。
将<
更改为<=
。
<
意味着不到。
<=
表示小于或等于(倍数)。
代码:
if len(recvdata)<=16:
print >>log_buffer,"sending data"
conn.sendall(data)
break
编辑:
如果您只是收到消息并返回整个字节,则可以执行以下操作:
while True:
conn,add=sock.accept()
addr=(conn,add)
print add
try:
recvdata=conn.recv(2048) #however much you need
wholebytes = len(recvdata) / 16 # get the number of whole bytes
# loop to send messages of length 16 with whole bytes
for i in range(wholebytes):
data = recvdata[i*16:(i+1)*16]
print >>log_buffer,"sending data"
conn.sendall(data)
break