Java伺服器與客戶端的通訊中物件流的使用
阿新 • • 發佈:2019-01-22
在使用java物件流的時候,首先要保證通訊雙方各有一個公用的包,裡面的內容相同,注意異常的丟擲。
相同的包
package common; public class User implements java.io.Serializable{ private String name; private String pass; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } }
伺服器端
客戶端package test1; //引包 import common.*; import java.net.*; import java.io.*; public class Myserver { public static void main(String[] args) { // TODO Auto-generated method stub Myserver ms = new Myserver(); } public Myserver() { ServerSocket ss; try { System.out.println("在9988埠上面監聽"); ss = new ServerSocket(9988); Socket s = ss.accept(); //以物件流讀取,假設客戶端傳送的是User物件 ObjectInputStream iso = new ObjectInputStream(s.getInputStream()); //接收客戶端傳送的資訊 User u = (User)iso.readObject(); System.out.println("接收到的資訊" + u.getName() + u.getPass()); //關閉,一定要加上,不然會拋異常 s.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
package test1; import common.*; import java.io.IOException; import java.io.ObjectOutputStream; import java.net.Socket; import java.net.UnknownHostException; public class Myclient { public static void main(String[] args) { // TODO Auto-generated method stub Myclient mc = new Myclient(); } public Myclient() { try { Socket s = new Socket("127.0.0.1",9988); //通過ObjectOutputStream給伺服器傳送物件 ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream()); User u = new User(); u.setName("無邪"); u.setPass("123456"); oos.writeObject(u); System.out.println("OK"); s.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }