1
伙计!我写一个简单的程序来发送消息到游戏服务器(反恐精英),该消息被用于查询服务器的信息,它有一个固定的格式:java发送UDP数据包问题
0xff, 0xff, 0xff, 0xff, 0x54, 0x53, 0x6f, 0x75,
0x72, 0x63, 0x65, 0x20, 0x45, 0x6e, 0x67, 0x69,
0x6e, 0x65, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79,
0x00
我的Java程序:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Test {
private static DatagramSocket ds;
/**
* @param args
*/
public static void main(String[] args) {
try {
ds = new DatagramSocket(27022);
byte[] data;
// TSource Engine Query
char peer0_0[] = {
0xff, 0xff, 0xff, 0xff,
0x54, 0x53, 0x6f, 0x75,
0x72, 0x63, 0x65, 0x20,
0x45, 0x6e, 0x67, 0x69,
0x6e, 0x65, 0x20, 0x51,
0x75, 0x65, 0x72, 0x79, 0x00
};
data = new String(peer0_0).getBytes();
System.out.println("send: " + new String(data));
DatagramPacket dp = new DatagramPacket(data, 0, data.length, InetAddress.getByName("219.133.59.20"), 27021);
ds.send(dp);
byte[] rec = new byte[1024];
DatagramPacket dp2 = new DatagramPacket(rec, 1024);
ds.receive(dp2);
System.out.println("receive: " + new String(rec));
ds.close();
} catch (IOException e) {
e.printStackTrace();
if(ds != null) ds.close();
}
}
}
但是当我运行它,我使用Wireshark捕捉包,我得到这个:
前四个字节0x3F的不是0xFF的,所以有什么问题呢?我在Windows 7中文版上运行java 6。
谢谢aix!但是我怎样才能在字节中表示0xff,0xff = 255,但是java中的最大字节是127 – CaiNiaoCoder
@YAMaiDie:'(byte)0xff' – NPE
+1:字符和字节在Java中是两个非常不同的东西。 –