2012-02-07 5 views
2

ソケットを介して稼動しているサーバーサービスがすでにあります。netcat経由でテストしたいと思います。私はMac OS X Lionを使用しています。現在、ポート経由でサーバーに接続してパケットを送信できますが、パケットに間違った値が含まれています。ここに詳細があります:netcatを使って1バイトシンボルをサーバソケットに送るには?

サーバーに「m」記号を送信する必要があり、サーバーは00000000、応答としてゼロバイトを返します。サーバーの人は私に 'm'を送信すると 'A0'を受信し、 '109'を送信するとサーバーは '313039A'を受信すると私に言った。どのように送信形式や何かを定義するには、私は 'm'(01101101)を送信する必要がありますか?

+0

A0についてはわかりませんが、ASCII 109では「0x31 0x30 0x39」です。 – cnicutar

答えて

14

あなたはあなたが簡単にあなたがあなたのローカルマシン上で送信しているものを確認することができます

echo -n 'm' | nc <server> <port> 

でちょうど「M」を送ることができます。

楽しくNULバイトを受信/送信しますNC
# in one Terminal start the listener: 
$ nc -l 1234 | hexdump -C 
00000000 6d            |m| 
00000001 

# in other Terminal send the packet: 
$ echo -n 'm' | nc 127.0.0.1 1234 

- そこ

# sending side 
$ echo -n X | tr X '\000' | nc 127.0.0.1 1234 

# receiving side 
$ nc -l 1234 | hexdump -C 
00000000 00            |.| 
00000001 
+0

ありがとうございました。しかし、私がnc経由で 'm'を送信しているとき、サーバは応答しません。これは私のプログラムから手動で形成されたパケットを送信しているとき(objective-c)に実行されます。また、この例では00000000と00000001の意味は?私は、 '6d'は 'm'だが他の値は何を意味するのだろう? IMHOは3バイトを送ります:ヌルバイト、 'm'の値とパケットのサイズ。 – Centurion

+0

しかし、私は1バイトだけを送る必要があります:ちょうど 'm'の値(01101101)。サーバーの実装方法これはハンドシェイクパッケージです。 – Centurion

+0

000000は0番ベースのアドレスではないので、1バイトの0x6dはちょうど 'm' –

関連する問題