1. 程式人生 > >Java伺服器與客戶端的通訊中物件流的使用

Java伺服器與客戶端的通訊中物件流的使用

在使用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();
		}

	}
}