我在Java中使用UDP Multicast。我的代码如下:
import java.io.*;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.lang.*;
import java.nio.charset.Charset;
public class MulticastTest {
static String MCAST_ADDR = "224.0.1.129";
static int DEST_PORT = 320;
static int BUFFER_LENGTH = 4096;
public static void main(String args[]) {
try {
byte[] b = new byte[BUFFER_LENGTH];
DatagramPacket dgram = new DatagramPacket(b, b.length);
MulticastSocket socket = new MulticastSocket(DEST_PORT);
socket.joinGroup(InetAddress.getByName(MCAST_ADDR));
socket.receive(dgram); // blocks until a datagram is received
System.err.println("Received " + dgram.getLength() + " bytes from " + dgram.getAddress());
dgram.setLength(b.length); // must reset length field!
String received = new String(dgram.getData());
System.out.println("Bytes received and printed at Console: " + received);
} catch (Exception e) {
}
}
}
我能够从另一个节点接收数据,但只能作为二进制数据。 有人可以告诉我如何转换变量"收到"进入一些有意义的东西,比如字符串/字符,这样它就可以被人类阅读了。你能否准确地编写代码,我真的很喜欢编程。我真的很感激任何帮助。
答案 0 :(得分:0)
String received = new String(dgram.getData());
这是从其他节点获取接收数据的地方,它已经是String格式。您遇到的问题是您正在从字节转换为字符串,并且由于您的缓冲区大小为4096,因此您的String变量中包含空白字符。这将出现在变量中的实际数据之后。
你可以做些什么来让人类更容易阅读",是通过一些字符串操作函数传递它来删除空白字符。 我们的想法是浏览你收到的String,并检索那里的所有字母数字字符。
希望这有帮助。
您可以使用它来提取数据
String received = new String(dgram.getData());
String dataReceived = "";
for(int i = 0;i<received.lenght();i++){
char charac = received.charAt(i);//this will allow you to get all data in String
switch(charac){
case 'a': dataReceived = dataReceived.concat(String.valueOf(charac));
case 'b': dataReceived = dataReceived.concat(String.valueOf(charac));
case 'c': dataReceived = dataReceived.concat(String.valueOf(charac));
case 'd': dataReceived = dataReceived.concat(String.valueOf(charac));
...
case '1': dataReceived = dataReceived.concat(String.valueOf(charac));
case '2': dataReceived = dataReceived.concat(String.valueOf(charac));
...
case '.': dataReceived = dataReceived.concat(String.valueOf(charac));
case ',': dataReceived = dataReceived.concat(String.valueOf(charac));
..
}
}
System.out.println("Data Received: "+dataReceived);
请注意,如果您的字符串只包含不需要检查数字和符号的字母,则代码不完整。
好运!