我已经创建了一个发送get server list命令的客户端,但是接收到的字节是不可读的。
下面是我的代码:
byte[] receiveBytes = udp.Receive(ref RemoteIpEndPoint);
string[] returnData = Encoding.Default.GetString(udp.Receive(ref RemoteIpEndPoint)).Split('\\');
textBox1.Lines = returnData;在本地变量中,我看到了写入值

但是程序向我展示了这个

有人能告诉我我的代码出了什么问题吗?
好的,我把我的代码改成
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上找到了smiler代码,并且它可以正常工作。
$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++;
}
}我猜不出我的代码出了什么问题。
发布于 2013-03-19 02:21:44
您假设整个UDP数据包都是英语可读消息。几乎从来都不是这样的。
您需要研究要连接到的服务器所使用的协议。例如,它可能会向您发送一个标识符列表,希望您返回该列表以查找该特定服务器的更多详细信息。
编辑:
您最新的PHP版本使用\来分隔地址,因此它们按如下方式发送:
127.0.0.1:8080\192.168.0.1:9000\8.8.8.8:80它将被编码为(为清楚起见添加空格):
7F000001 1F90 5C c0A80001 2328 5C 08080808 0050我在您的示例中没有看到任何对\字符的引用,所以您可能会将此示例解码为(请注意,您通常不会使用它,但您修改了您的保护子句以隐藏此bug):
127.0.0.1:8080
92.192.168.0:291
40.92.8.8:2056https://stackoverflow.com/questions/15480123
复制相似问题