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) {
}
}
}