在python中的套接字编程中发送回severs之前检查字节长度

时间:2014-01-09 23:16:27

标签: python sockets

我的客户端向服务器发送消息。服务器每次收集消息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的多个时,它不会发送回客户端。我该如何解决这个问题? `

1 个答案:

答案 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