Java Socket 实现的传输对象功能示例
Java Socket 是一种常用的网络编程技术,能够实现客户端和服务器端之间的数据传输。在 Java 中,使用 Socket 可以实现对象的传输,这种技术广泛应用于分布式系统、网络游戏和远程调用等领域。本文将详细介绍 Java Socket 实现的传输对象功能,包括接口、客户端和服务器端相关实现技巧。
一、序列化接口
在 Java 中,想要传输对象,必须实现 java.io.Serializable 接口,这是因为序列化是将对象转换为字节流的过程,而 Serializable 接口是 Java 中的标记接口,表明该类可以被序列化。例如:
```java
public class User implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private String name;
private String password;
// ...
}
```
在上面的代码中,User 类实现了 Serializable 接口,这样可以将 User 对象序列化为字节流,以便在网络上传输。
二、服务器端实现
在服务器端,需要使用 ObjectInputStream 和 ObjectOutputStream 来接收和发送 Socket 中的 InputStream 和 OutputStream。下面是一个简单的服务器端代码:
```java
public class MyServer {
private final static Logger logger = Logger.getLogger(MyServer.class.getName());
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(10000);
while (true) {
Socket socket = server.accept();
invoke(socket);
}
}
private static void invoke(final Socket socket) throws IOException {
new Thread(new Runnable() {
public void run() {
ObjectInputStream is = null;
ObjectOutputStream os = null;
try {
is = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
os = new ObjectOutputStream(socket.getOutputStream());
Object obj = is.readObject();
User user = (User) obj;
System.out.println("user: " + user.getName() + "/" + user.getPassword());
user.setName(user.getName() + "_new");
os.writeObject(user);
} catch (IOException e) {
logger.log(Level.SEVERE, "Error handling request", e);
} finally {
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
}
}
}).start();
}
}
```
在上面的代码中,服务器端使用 ObjectInputStream 来读取客户端发送的对象,并使用 ObjectOutputStream 来发送对象回客户端。
三、客户端实现
客户端的实现与服务器端类似,使用 ObjectInputStream 和 ObjectOutputStream 来接收和发送 Socket 中的 InputStream 和 OutputStream。下面是一个简单的客户端代码:
```java
public class MyClient {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 10000);
ObjectOutputStream os = new ObjectOutputStream(socket.getOutputStream());
User user = new User("John", "password");
os.writeObject(user);
ObjectInputStream is = new ObjectInputStream(socket.getInputStream());
User receivedUser = (User) is.readObject();
System.out.println("Received user: " + receivedUser.getName() + "/" + receivedUser.getPassword());
}
}
```
在上面的代码中,客户端使用 ObjectOutputStream 来发送 User 对象到服务器端,并使用 ObjectInputStream 来接收服务器端发送的对象。
四、总结
本文详细介绍了 Java Socket 实现的传输对象功能,包括序列化接口、服务器端和客户端的实现技巧。通过使用 ObjectInputStream 和 ObjectOutputStream,可以实现对象的传输,满足了分布式系统、网络游戏和远程调用等领域的需求。