我试图编写一个关于UDP连接的简单程序来了解它们。我已经实现了一些基本的东西,但是当我试图发送和收回我发送的东西时,我面临着一些问题,比如,
当我这样做时,发送一个字符串
"asd“到服务器,我得到asdxxxxxxxxxx,当我试图打印在服务器上得到的东西时,我得到[B@5f186fab ]。
我该如何解决这个问题?
更清楚的是,我给你发了几行代码,
在客户中;
Scanner in = new Scanner(System.in);
String result = in.nextLine();
// send request
byte[] buf = new byte[1000];
String read = result;
InetAddress address = InetAddress.getByName("localhost");
DatagramPacket packet = new DatagramPacket(result.getBytes(), result.getBytes().length, address, 4445);
socket.send(packet);
// get response
packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
// display response
String received = new String(packet.getData(), 0, packet.getLength());
System.out.println("Quote of the Moment: " + received);在服务器中;
byte[] buf = new byte[1000];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
byte[] received = packet.getData();
System.out.println(received.toString());
// figure out response
// send the response to the client at "address" and "port"
InetAddress address = packet.getAddress();
int port = packet.getPort();
packet = new DatagramPacket(received, received.length, address, port);
socket.send(packet);谢谢大家
编辑1我想我的缓冲区有问题,但我不知道如何解决。
发布于 2011-09-22 11:08:32
您可以使用
System.out.println(Arrays.toString(received));但你想要的是
System.out.println(new String(received, o, lengthRead, "UTF-8"));发布于 2013-03-16 06:41:54
你修好这个了吗?
否则,我发现,如果您声明一个接收byte[] buf的容量大于实际接收的长度字符串,则缓冲区的其余部分将满是不需要的字节。
例如:如果声明byte[] received = new byte[1000];,但只接收4个字节的字符串,则最终将得到996个不需要的字节。
解决这个问题的一个快速方法是做一些类似的事情
byte[] received = packet.getData();
System.out.println(received.toString().trim());trim()为我做了这个把戏。希望这对你有帮助!
https://stackoverflow.com/questions/7513661
复制相似问题