[英]Communication between Java programs with DatagramSocket
I'm trying to communicate two java programs, no problem with this. 我正在尝试交流两个Java程序,对此没有问题。 Program A send a message with the word "token" and Program B receive the message and print it.
程序A发送带有单词“ token”的消息,程序B收到该消息并打印。 The problem I have is I would like to send before length of message to Program B to create the array with the accurate length but i don't know how can i do it.
我的问题是我想在消息长度之前发送给程序B,以创建具有正确长度的数组,但是我不知道该怎么做。
public class ProgramA {
public static void main(String[] args) {
try {
DatagramSocket datagramSocket = new DatagramSocket();
String message = "token";
InetAddress addr = InetAddress.getByName("localhost");
DatagramPacket datagram = new DatagramPacket(message.getBytes(),message.getBytes().length, addr, 5556);
datagramSocket.send(datagram);
datagramSocket.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
public class ProgramB {
public static void main(String[] args) {
try {
InetSocketAddress addr = new InetSocketAddress("localhost", 5556);
DatagramSocket datagramSocket = new DatagramSocket(addr);
byte[] message = new byte[5];
DatagramPacket datagram = new DatagramPacket(message, message.length);
datagramSocket.receive(datagram);
datagramSocket.close();
for(int i = 0; i < message.length; i++) {
System.out.print((char)message[i]);
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
If you know that the length of the message is maximum X bytes, you could use something like this: 如果您知道消息的长度最大为X个字节,则可以使用以下内容:
package experiment;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class ProgramA {
public static void main(String[] args) {
try {
System.out.println("Started");
DatagramSocket datagramSocket = new DatagramSocket();
String message = "tokenasdfasdfasdfasdf";
InetAddress addr = InetAddress.getByName("localhost");
DatagramPacket datagramLength = new DatagramPacket(new byte[]{(byte)message.length()}, 1, addr, 5556);
DatagramPacket datagram = new DatagramPacket(message.getBytes(),message.getBytes().length, addr, 5556);
datagramSocket.send(datagramLength);
datagramSocket.send(datagram);
datagramSocket.close();
System.out.println("Done");
}
catch (IOException e) {
e.printStackTrace();
}
}
}
package experiment;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
public class ProgramB {
public static void main(String[] args) {
try {
InetSocketAddress addr = new InetSocketAddress("localhost", 5556);
DatagramSocket datagramSocket = new DatagramSocket(addr);
byte[] messageLength = new byte[1];
DatagramPacket datagramLength = new DatagramPacket(messageLength, 1);
datagramSocket.receive(datagramLength);
byte[] message = new byte[(int)messageLength[0]];
DatagramPacket datagram = new DatagramPacket(message, message.length);
datagramSocket.receive(datagram);
datagramSocket.close();
for(int i = 0; i < message.length; i++) {
System.out.print((char)message[i]);
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
This works assumed the length of the message does not exceed 127; 假设邮件的长度不超过127,则可以正常工作; otherwise your datagramPacket with the lenght of the message has to contain more than one byte
否则,带有消息长度的datagramPacket必须包含一个以上的字节
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.