如何在java中通过UDP发送int int
问题描述:
我在尝试编写一些通过UDP发送单个int的代码。该代码我到目前为止有:如何在java中通过UDP发送int int
发件人:
int num = 2;
DatagramSocket socket = new DatagramSocket();
ByteArrayOutputStream bout = new ByteArrayOutputStream();
PrintStream pout = new PrintStream(bout);
pout.print(num);
byte[] barray = bout.toByteArray();
DatagramPacket packet = new DatagramPacket(barray, barray.length);
InetAddress remote_addr = InetAddress.getByName("localhost");
packet.setAddress(remote_addr);
packet.setPort(1989);
socket.send(packet);
接收机:
DatagramSocket socket = new DatagramSocket(1989);
DatagramPacket packet = new DatagramPacket(new byte[256] , 256);
socket.receive(packet);
ByteArrayInputStream bin = new ByteArrayInputStream(packet.getData());
for (int i=0; i< packet.getLength(); i++)
{
int data = bin.read();
if(data == -1)
break;
else
System.out.print((int) data);
的问题是接收器打印 '50' 到屏幕这显然是不对的。我认为问题可能是我以某种方式将它作为字符串或其他东西发送,而不是正确读取它。任何帮助?
答
使用数据流,如:
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
final ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
final DataOutputStream dataOut = new DataOutputStream(byteOut);
dataOut.writeInt(1);
dataOut.writeDouble(1.2);
dataOut.writeLong(4l);
dataOut.close(); // or dataOut.flush()
final byte[] bytes = byteOutStream.toByteArray();
final ByteArrayInputStream byteIn = new ByteArrayInputStream(bytes);
final DataInputStream dataIn = new DataInputStream(byteIn);
final int integ = dataIn.readInt();
final double doub = dataIn.readDouble();
final long lon = dataIn.readLong();
System.out.println(integ);
System.out.println(doub);
System.out.println(lon);
}
}
答
InputStream.read()返回单个字节,而不是32位整数(请参阅javadoc)。所以你想要的是
ObjectInputStream os = new ObjectInputStream(bin);
os.readInt();
答
问题是,你正在接收'2'的CHAR CODE而不是acctual 2作为整数。尝试更改您的接收器代码为:
DatagramSocket socket = new DatagramSocket(1989);
DatagramPacket packet = new DatagramPacket(new byte[256] , 256);
socket.receive(packet);
System.out.print(new String(packet.getData()));
但是ObjectInputStream解决方案对您我会更好。