Sokect簡單入門(3)TCP協議一
阿新 • • 發佈:2018-11-08
簡單物件傳輸
一、物件例項程式:注意物件要實現序列化藉口
1 import java.io.Serializable; 2 3 /** 4 * 使用者類 5 * */ 6 public class User implements Serializable{ 7 private String loginName; //使用者名稱 8 private String pwd; //使用者密碼 9 10 public User() { 11 } 12 public User(String loginName, String pwd) {13 super(); 14 this.loginName = loginName; 15 this.pwd = pwd; 16 } 17 18 public String getLoginName() { 19 return loginName; 20 } 21 public void setLoginName(String loginName) { 22 this.loginName = loginName; 23 } 24 public String getPwd() {25 return pwd; 26 } 27 public void setPwd(String pwd) { 28 this.pwd = pwd; 29 } 30 31 }
二、伺服器端程式碼:
1 import java.io.BufferedReader; 2 import java.io.IOException; 3 import java.io.InputStream; 4 import java.io.InputStreamReader; 5 import java.io.ObjectInputStream;6 import java.io.OutputStream; 7 import java.io.PrintWriter; 8 import java.net.ServerSocket; 9 import java.net.Socket; 10 11 import pb.socket.entity.User; 12 13 /** 14 * 伺服器端 15 * */ 16 public class LoginServer { 17 public static void main(String[] args) { 18 try { 19 //1.建立一個伺服器Socket(ServerSocket)繫結指定埠並開始監聽 20 ServerSocket serverSocket=new ServerSocket(8800); 21 //2.使用accept()方法阻塞等待監聽,獲得新的連線 22 Socket socket=serverSocket.accept(); 23 //3.獲得輸入流 24 InputStream is=socket.getInputStream(); 25 //獲得流:可以對物件進行反序列化 26 ObjectInputStream ois=new ObjectInputStream(is); 27 //獲得輸出流 28 OutputStream os=socket.getOutputStream(); 29 PrintWriter pw=new PrintWriter(os); 30 //4.讀取使用者輸入資訊 31 User user=(User)ois.readObject(); 32 System.out.println("使用者資訊:"+user.getLoginName()+"---"+user.getPwd()); 33 //給客戶一個響應 34 String reply="welcome!"; 35 pw.write(reply); 36 pw.flush(); 37 //5.關閉資源 38 pw.close(); 39 os.close(); 40 ois.close(); 41 is.close(); 42 socket.close(); 43 serverSocket.close(); 44 } catch (IOException e) { 45 // TODO Auto-generated catch block 46 e.printStackTrace(); 47 } catch (ClassNotFoundException e) { 48 // TODO Auto-generated catch block 49 e.printStackTrace(); 50 } 51 52 } 53 }
三、客戶端程式碼:
1 import java.io.BufferedReader; 2 import java.io.IOException; 3 import java.io.InputStream; 4 import java.io.InputStreamReader; 5 import java.io.ObjectOutputStream; 6 import java.io.OutputStream; 7 import java.io.PrintWriter; 8 import java.net.Socket; 9 import java.net.UnknownHostException; 10 11 import pb.socket.entity.User; 12 13 /** 14 * 客戶端 15 * */ 16 public class LoginClient { 17 public static void main(String[] args) { 18 try { 19 //1.建立客戶端Socket連線,指定伺服器的位置以及埠 20 Socket socket=new Socket("localhost",8800); 21 //2.得到Socket的讀寫流 22 OutputStream os=socket.getOutputStream(); 23 //物件序列化流 24 ObjectOutputStream oos=new ObjectOutputStream(os); 25 //輸入流 26 InputStream is=socket.getInputStream(); 27 BufferedReader br=new BufferedReader(new InputStreamReader(is)); 28 //3.利用流按照一定的協議對Socket進行讀/寫操作 29 User user=new User(); 30 user.setLoginName("Tom"); 31 user.setPwd("123456"); 32 oos.writeObject(user); 33 34 socket.shutdownOutput(); 35 //接受伺服器的響應並列印顯示 36 String reply=null; 37 while(!((reply=br.readLine())==null)){ 38 System.out.println("我是客戶端,伺服器的響應為:"+reply); 39 } 40 //4.關閉資源 41 br.close(); 42 is.close(); 43 oos.close(); 44 os.close(); 45 socket.close(); 46 } catch (UnknownHostException e) { 47 // TODO Auto-generated catch block 48 e.printStackTrace(); 49 } catch (IOException e) { 50 // TODO Auto-generated catch block 51 e.printStackTrace(); 52 } 53 54 } 55 }