写了一个UDP传递对象的简单例子
服务端:
package com.udp;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPServer {
public static void main(String[] args) throws IOException {
DatagramSocket ds = new DatagramSocket(8081);
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
while (true) {
System.out.println("for receive....");
ds.receive(dp);
Student s = (Student)b2o(dp.getData());
System.out.println(s.name);
}
}
public static Object b2o(byte[] buffer) {
Object obj = null;
try {
ByteArrayInputStream buffers = new ByteArrayInputStream(buffer);
ObjectInputStream in = new ObjectInputStream(buffers);
obj = in.readObject();
in.close();
} catch (Exception e) {
System.out.println("error");
}
return obj;
}
}
客户端:
package com.udp;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
public class UDPClient {
public static void main(String[] args) throws IOException {
InetSocketAddress isa = new InetSocketAddress(InetAddress
.getByName("192.168.1.102"), 8081);
DatagramSocket ds = new DatagramSocket();
Student student = new Student();
student.name = "denghong";
DatagramPacket dp = new DatagramPacket(o2b(student), o2b(student).length, isa);
ds.send(dp);
}
public static byte[] o2b(Student s) {
ByteArrayOutputStream buffers = new ByteArrayOutputStream();
try {
ObjectOutputStream out = new ObjectOutputStream(buffers);
out.writeObject(s);
out.close();
} catch (Exception e) {
System.out.println("error");
return null;
}
return buffers.toByteArray();
}
}
序列化对象
package com.udp;
import java.io.Serializable;
public class Student implements Serializable{
private static final long serialVersionUID = -5971668520303705956L;
public String name;
}
分享到:
相关推荐
序列化不仅可以保存对象的状态,还可以用于持久化存储或者在网络中传递对象。 2. **Netty的ByteBuf与序列化**: Netty使用`ByteBuf`作为其内存管理的核心组件,它比Java内置的`ByteBuffer`更高效。在进行Java序列...
在自定义协议中引入MessagePack,我们需要先为我们的数据对象定义MessagePack兼容的序列化和反序列化方法。MessagePack提供了一套API,允许我们注册类型并生成对应的序列化和反序列化函数。这样,我们可以在服务器端...
6. **反序列化JSON**:客户端接收到数据后,反序列化回JSON对象。nlohmann/json库的`json::parse()`函数可以帮助完成这个任务。 7. **处理和显示数据**:反序列化完成后,客户端可以解析JSON数据,按需处理字符串,...
3. **数据打包与解包**:UDP通信通常涉及数据的序列化和反序列化。可以使用`BinaryFormatter`或自定义的序列化机制将对象转换为字节流,再通过`Socket.Send`或`Receive`方法进行传输。接收端则相反,先接收字节流,...
在Apache MINA中传递对象,主要依赖于Java的序列化机制。在这个例子中,`MyRequestObject`和`MyResponseObject`是两个简单的Java对象,它们都实现了`Serializable`接口。这使得这些对象能够被转换为字节流在网络中...
4. 数据序列化与反序列化:因为UDP是无状态的,所以需要将消息对象序列化为字节流进行传输,然后在接收端进行反序列化恢复原始信息。 5. 错误处理:考虑到UDP的不可靠性,需要编写适当的错误处理代码,例如重传机制...
`FormatterHelper`类提供了序列化和反序列化对象的方法,这是在网络通信中传输复杂数据结构时常用的技术。`Serialize`方法将对象转换为字节数组,方便通过网络发送;`Deserialize`方法则接收字节数组并恢复为原来的...
在实际项目中,除了这些基础操作,还需要考虑网络环境的变化、数据的可靠传输(比如自定义序列化协议,添加确认机制)、流量控制等问题。这个源码示例应该提供了一个基本的框架,展示了如何在C#中实现UDP通信的基本...
这个聊天框架可能包含了以下组件:登录注册模块、会话管理模块、消息发送与接收模块、数据序列化与反序列化模块、网络连接管理模块等。登录注册模块负责用户的账户验证;会话管理模块维护用户间的会话状态;消息模块...
Java+UDP+数据解码+UDP数据发送+源代码,实现实时接收数据并显示在前端界面,读取本地文件,对文件进行操作。适合初学者对Java的UDP通信还不是特别的熟悉的Java开发者,详细的...对发送数据的组帧和对象序列化到数组。
Java+UDP+数据解码+UDP数据发送+源代码,实现实时接收数据并显示在前端界面,读取本地文件,对文件进行操作。适合初学者对Java的UDP通信还不是特别的熟悉的Java开发者,详细的...对发送数据的组帧和对象序列化到数组。
Delphi提供了诸如TJSONObject、TXMLDocument等工具进行数据序列化和反序列化,确保信息在不同系统间能够正确传递。 8. **错误处理与容错**:由于UDP的不可靠性,开发者必须编写代码来处理可能的数据丢失、重复或...
数据包通常包含棋盘状态、落子位置等信息,需要进行序列化和反序列化处理。 2. **棋盘逻辑模块**:处理游戏规则,如判断胜负、合法落子位置检查、禁手规则等。这部分通常用抽象数据类型和算法来实现。 3. **用户界面...
在Netty中集成Protobuf,主要目的是利用Protobuf的数据序列化能力,将Java对象转换为字节流,然后通过Netty的Channel发送到网络,接收端再反序列化恢复成原来的对象。具体步骤如下: 1. 定义消息:首先创建一个....
这个"Java Netty基于对象数据传输Demo"应该是演示了如何使用Netty进行对象序列化和反序列化,以便在网络中高效地传输自定义对象。 Netty的核心在于它的`ByteBuf`类,它是字节缓冲区的高效实现,优于Java NIO的`...
4. **对象反序列化**: 在接收端,数据经过反序列化过程,恢复为原始的Java对象。这同样需要`ProtocolDecoder`来解码接收到的字节流。 5. **事件处理**: Mina使用事件驱动模型,当数据到达或发送时,会触发相应的事件...
由于Socket通信是基于字节流的,我们需要将自定义类的对象转换为字节流(序列化),然后在接收端再恢复成原来的对象(反序列化)。在Delphi中,可以使用`TBinaryStream`或`TMemoryStream`来实现这一过程。例如: ``...
- UDP协议本身不保证数据的完整性和顺序,所以聊天程序可能需要自己实现序列化和反序列化机制,确保数据的正确传输。 - 数据通常以字符串形式发送,可能需要进行UTF-8等字符编码处理,以避免乱码问题。 4. **异常...