1. 程式人生 > >Sokect簡單入門(3)TCP協議一

Sokect簡單入門(3)TCP協議一

簡單物件傳輸

一、物件例項程式:注意物件要實現序列化藉口

 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 }