如何在java中通过UDP发送一个int
Posted
技术标签:
【中文标题】如何在java中通过UDP发送一个int【英文标题】:how to send an int through UDP in java 【发布时间】:2011-03-08 18:21:59 【问题描述】:我正在尝试编写一些通过 UDP 发送单个 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”,这显然是不正确的。我认为问题可能是我以某种方式将它作为字符串或其他东西发送,并且它没有正确读取它。有什么帮助吗?
【问题讨论】:
【参考方案1】:使用如下数据流:
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 = byteOut.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);
【讨论】:
【参考方案2】:InputStream.read() 返回单个字节,而不是 32 位整数(参见 javadoc)。所以你想要的是
ObjectInputStream os = new ObjectInputStream(bin);
os.readInt();
【讨论】:
【参考方案3】:问题是您收到的 CHAR CODE 为 '2' 而不是实际的 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 解决方案对你来说会更好。
【讨论】:
以上是关于如何在java中通过UDP发送一个int的主要内容,如果未能解决你的问题,请参考以下文章