天天看點

java的Socket程式設計實作用戶端與服務端的通信-----------實作用戶端與服務端對象的互通

java的Socket程式設計實作用戶端與服務端的通信-----------實作用戶端與服務端對象的互通

建立好對象(必須序列化;也就是實作Serializable這個接口,隻有序列化了才可以進入流實作想要的操作),服務端,用戶端分别使用ObjectInputStream(對象輸入流),ObjectOutputStream,(對象輸出流)進行讀寫,實作客-服對象互通;簡單的實作如下

import java.io.Serializable;

//implements Serializable實作這個接口,代表我們這個對象做了序列化 ;
	//商品資訊的實體類
public class Shop implements Serializable {

	
	public  Shop(int numb,String name) {
		super();
		this.numb=numb;
		this.name=name;
		
		
	}
	private   int numb;
	private  String name;
	
	public int getNumb() {
		return numb;
	}

	public void setNumb(int numb) {
		this.numb = numb;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {//重寫toString更友善列印
		return "Shop [numb=" + numb + ", name=" + name + "]";
	}

	}
           
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
	
	
	//implements Serializable實作這個接口,代表我們這個對象做了序列化 ;做了序列化,這個對象就能夠在網絡世界裡面穿梭
	//商品資訊的實體類
public class Threads {
	
	 public static void main(String[] args) {
		 // Server-Object
		 
		 Shop shop1 = new Shop(101,"美滋滋");
		 Shop shop2 =new Shop(102,"樂呵呵");
			
		List <Shop>list =new ArrayList<Shop>();
		list.add(shop1);
		list.add(shop2);
		
			try {
				
				ServerSocket st = new ServerSocket(8888);
				System.out.println("這裡伺服器準備好了,等待服務端的接入·······");
				
				Socket socket = st.accept();
				
				
				OutputStream os = socket.getOutputStream();
				ObjectOutputStream ops = new ObjectOutputStream(os);
				
				ops.writeObject(list);
				
				System.out.println("已接入用戶端:"+socket.getInetAddress());
				
				InputStream is = socket.getInputStream();
				ObjectInputStream ois = new ObjectInputStream(is);
				
			
				Object oj =ois.readObject();
				
				List<Shop>list1 =(List)oj;
				
				System.out.println("客戶說:"+oj);
				System.out.println("以上是接收到的資訊");
				
				socket.close();
				ops.flush();
				
			}catch(IOException e) { 
				
				
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
			

		}


	

}
           
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import javax.imageio.IIOException;

public class Threadc {

	public static void main(String[] args) throws ClassNotFoundException {
		//Clinet-Object
		
		try {
			
			Socket socket = new Socket("127.0.0.1",8888);
			
			//進階流:Scanner,PrintWriter;

			InputStream  is =socket.getInputStream();
			ObjectInputStream ois =new ObjectInputStream(is);
		
			Object oj = ois.readObject();
			 
			List <Shop>list =(List)oj;
			
			System.out.println("伺服器說:"+oj);
		
			OutputStream os = socket.getOutputStream();
			ObjectOutputStream oos =new ObjectOutputStream(os);
			List<Shop> list1 =new ArrayList();
			Shop shop =new Shop(9,"送給你666");
			list1.add(shop);		
			oos.writeObject(list1);
				oos.flush();	
			System.out.println("已連接配接伺服器.");
			socket.close();
		}catch(IOException e) {
			
			
			
		}

	}

}