题
我正在做一个网络编程作业,关于编写一个简单的 IM 系统(非常类似于最简单版本的 Windows Messenger)。
规范指定我必须在单个数据报包中发送超过 4 个数据字段,这些字段是:
To From Type Message
where type refers to message type, implemented as a user defined enum class.
我想学习如何将所有这些数据打包到一个数据包中。
更新:到目前为止,请提供帮助,但要说我有单独修补数据包的正常方法的字符串句子和字符串是
byte[] sendData = new byte [256]
sendData = sentence.getBytes();
但是我到底如何将“from”字符串与句子字符串一起附加到sendData?
解决方案
简而言之,您需要做的是:
- 创建一个对象(类),其中包含 4 个字段(from/to/enum/message)
- 把这个连载一下它必须实施 可串行化. 。有关如何序列化的信息,请参阅此处的其他解决方案
- 转换为字节数组并发送到套接字(有关详细信息,请参阅其他地方)
在另一端,您将读取此字节流,反序列化并将其转换为 1 中定义的类的实例。多于。
通过创建包含 4 个字段的一个对象并序列化该对象,您可以将所有四个字段一起发送(我的印象是这是一个绊脚石?)。
请注意,数据报将受到网络传输层施加的大小限制,但对于此应用程序,我怀疑这不是问题。
其他提示
您可以使用这样的事情发送任何序列化对象。
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(buffer);
out.writeObject(objectYouWantToSend);
out.close();
buffer.close();
DatagramPacket packet = new
DatagramPacket(buffer.toByteArray(),
buffer.size(),
InetAddress.getByName(...),
portNumber);
socket.send(packet);
您根本它们传递给所述网络接口之前,附加它们。沿着线的东西:
byte[] buff = new byte[256];
// Add al your fields here to buff.
DatagramPacket packet = new DatagramPacket(buff, buff.length, address, 1234);
socket.send(packet);
如果他们不是所有的字符串,你需要将它们编码为这样的。
不隶属于 StackOverflow