Java中應用Socket發送Java對象實例。本站提示廣大學習愛好者:(Java中應用Socket發送Java對象實例)文章只能為提供參考,不一定能成為您想要的結果。以下是Java中應用Socket發送Java對象實例正文
之前寫聊天法式都是用字符串加個標記就直接發送到辦事器,然後轉發了。
如今請求我用對象流直接發送對象,測試了一下,記載一下。
其實我更偏向用json發送對象的,json說白了也是字符串,等有空了好好研討研討。
重要功效:客戶端給辦事器發送個對象,辦事器吸收到了打印出來。反過去是差不多了,就不寫了。
下面是全體架構。
User類就兩個屬性。
package com.qiantu.bean;
import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
辦事器端:吸收客戶端發送過去的user對象:
package test;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
import com.qiantu.bean.User;
public class TestServer {
public void start() {
try {
ServerSocket ss = new ServerSocket(7777);
System.out.println("start to accept...");
Socket socket = ss.accept();
//樹立輸出流
ObjectInputStream ois = new ObjectInputStream(
new BufferedInputStream(socket.getInputStream()));
Object obj = ois.readObject();
if (obj != null) {
User user = (User)obj;//把吸收到的對象轉化為user
System.out.println("user: " + user.getName());
System.out.println("password: " + user.getPassword());
}
ois.close();
socket.close();
ss.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new TestServer().start();
}
}
客戶端:給辦事器端發送user對象:
package client;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import com.qiantu.bean.User;
public class TestClient {
public static void main(String[] args) {
new TestClient().start();
}
public void start() {
try {
Socket socket = new Socket("127.0.0.1", 7777);
//樹立輸出流
ObjectOutputStream oos = new ObjectOutputStream(socket
.getOutputStream());
User user = new User();
user.setName("梁國俏");
user.setPassword("123456");
//輸出對象, 必定要flush()
oos.writeObject(user);
oos.flush();
oos.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
運轉成果:
要留意的處所:
《1》實體類要完成Serializable類,添加標識serialVersionUID。
《2》發送對象以後要flush();
《3》這個比擬主要,弄了我半天不曉得哪裡失足,言來是這個。
辦事器端和客戶端雙方的實體類要如出一轍,類名一樣,包名也要一樣。我就是由於包名紛歧樣弄了良久。。。。