0

get server list コマンドを送信するクライアントを作成しましたが、受信したバイトが読み取れません。

これが私のコードです:

    byte[] receiveBytes = udp.Receive(ref RemoteIpEndPoint);

    string[] returnData = Encoding.Default.GetString(udp.Receive(ref RemoteIpEndPoint)).Split('\\');
    textBox1.Lines = returnData;

ローカルでは、書き込み値が表示されますenter image description here

しかし、プログラムはこれを見せてくれます

enter image description here

誰かが私のコードの何が問題なのか教えてもらえますか?

OK、コードを次のように変更します

 yte[] receiveBytes = udp.Receive(ref RemoteIpEndPoint);
    int size = receiveBytes.Length;
    int i = 0;
    while ( i <= size-5 )
    {

        string ip = receiveBytes[i] + "." + receiveBytes[i + 1] + "." + receiveBytes[i + 2] + "." + receiveBytes[i + 3] ;
        int port = receiveBytes[i + 4] * 256 + receiveBytes[i + 5];

        textBox1.Text += ip + ":" + port.ToString() + Environment.NewLine;
        i = i + 6;
    }

しかし、受信したデータは正しくありません!

私はphpとその作業でスマイラーコードを見つけました。

$data = explode("\\", $data);

for($i=0, $o=0; $i<count($data); $i++) {
    if (strlen($data[$i])>=4) { //fix

        // First 4 bytes are the ip:
        $list_server[$o]['ip']=ord($data[$i][0]).".".ord($data[$i][1]).".".ord($data[$i][2]).".".ord($data[$i][3]);

        // Last 2 bytes are the port, Takes penultimate number and multiply by 256 and sum with the last number:
        $list_server[$o]['port']=(ord($data[$i][4])*256) + ord($data[$i][5]);
        //GetName($list_server[$o]['ip'],$list_server[$o]['port']);
        $o++;
    }
}

私のコードのどこが悪いのか推測できません。

4

1 に答える 1

0

UDP パケット全体が英語で読めるメッセージであると想定しています。これはほとんどありません。

接続しているサーバーで使用されているプロトコルを調査する必要があります。たとえば、その特定のサーバーの詳細を見つけるために返されることを期待している識別子のリストを送信している可能性があります。

編集:

最新の PHP バージョンでは、\アドレスを区切るために a が使用されているため、次のように送信されます。

127.0.0.1:8080\192.168.0.1:9000\8.8.8.8:80

次のようにエンコードされます (わかりやすくするためにスペースが追加されています)。

7F000001 1F90 5C c0A80001 2328 5C 08080808 0050

あなたの例では文字への参照が見られない\ので、この例を次のようにデコードする可能性があります (通常は消費に失敗しますが、ガード句を変更してこのバグを非表示にしたことに注意してください):

127.0.0.1:8080
92.192.168.0:291
40.92.8.8:2056
于 2013-03-18T18:21:43.647 に答える