3

サンプルのPythonソケットモジュールに基づくコードを使用して、UDPを介してバイトのリストを送信しようとしています。クライアント/サーバー送信は文字列で正常に機能します。バイトアレイを使用するのが道のりのようでしたが、受信する長さはコンテンツによって異なるようです。1,2,3,4,5,6の送信は正常に機能しますが、6を10または11に変更すると、サーバーで5バイトしか受信しません。Ubuntu上のPython2.7.3。何がわからないの?

クライアント:

data = bytearray([1,2,3,4,5,6])
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(data, (HOST, PORT))

サーバ:

class MyUDPHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        data = self.request[0].strip()
        socket = self.request[1]
        print len(data)
        idata = map(ord, data)
        print len(idata)
        print idata[0],idata[1],idata[2],idata[3]
4

2 に答える 2

6

10と11は、それぞれ改行とタブのASCIIコードです。strip()呼び出しは、それらをデータから削除しています。

于 2013-02-17T05:45:44.503 に答える
2

strip()は使用しないでください。これは、文字列から空白と改行を削除するためのものです。あなたの場合、10は空白だと思い、それを削除しました。

>>> len(bytearray([1,2,3,4,5,10]))
6
>>> len(bytearray([1,2,3,4,5,10]).strip())
5
于 2013-02-17T05:48:20.720 に答える