簡單的java socket 示例

1、搭建服務器端java

a)、建立ServerSocket對象綁定監聽端口。服務器

b)、經過accept()方法監聽客戶端的請求。socket

c)、創建鏈接後,經過輸入輸出流讀取客戶端發送的請求信息。spa

d)、經過輸出流向客戶端發送請求信息。.net

e)、關閉相關資源。3d

 1 package socket;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStreamReader;
 6 import java.io.PrintWriter;
 7 import java.net.ServerSocket;
 8 import java.net.Socket;
 9 
10 public class SocketService {
11     //搭建服務器端
12     public static void main(String[] args) throws IOException{
13         SocketService socketService = new SocketService();
14         //一、a)建立一個服務器端Socket,即SocketService 
15         socketService.oneServer();
16     }
17     public  void oneServer(){
18         try{
19             ServerSocket server=null;
20             try{
21                 server=new ServerSocket(5209);
22                 //b)指定綁定的端口,並監聽此端口。
23                 System.out.println("服務器啓動成功");
24                 //建立一個ServerSocket在端口5209監聽客戶請求
25             }catch(Exception e) {
26                     System.out.println("沒有啓動監聽:"+e);
27                     //出錯,打印出錯信息
28             }
29             Socket socket=null;
30             try{
31                 socket=server.accept();
32                 //二、調用accept()方法開始監聽,等待客戶端的鏈接 
33                 //使用accept()阻塞等待客戶請求,有客戶
34                 //請求到來則產生一個Socket對象,並繼續執行
35             }catch(Exception e) {
36                 System.out.println("Error."+e);
37                 //出錯,打印出錯信息
38             }
39             //三、獲取輸入流,並讀取客戶端信息 
40             String line;
41             BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
42             //由Socket對象獲得輸入流,並構造相應的BufferedReader對象
43             PrintWriter writer=new PrintWriter(socket.getOutputStream());
44             //由Socket對象獲得輸出流,並構造PrintWriter對象
45             BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
46             //由系統標準輸入設備構造BufferedReader對象
47             System.out.println("Client:"+in.readLine());
48             //在標準輸出上打印從客戶端讀入的字符串
49             line=br.readLine();
50             //從標準輸入讀入一字符串
51             //四、獲取輸出流,響應客戶端的請求 
52             while(!line.equals("end")){
53             //若是該字符串爲 "bye",則中止循環
54                 writer.println(line);
55                 //向客戶端輸出該字符串
56                 writer.flush();
57                 //刷新輸出流,使Client立刻收到該字符串
58                 System.out.println("Server:"+line);
59                 //在系統標準輸出上打印讀入的字符串
60                 System.out.println("Client:"+in.readLine());
61                 //從Client讀入一字符串,並打印到標準輸出上
62                 line=br.readLine();
63                 //從系統標準輸入讀入一字符串
64             } //繼續循環
65 
66             //五、關閉資源 
67             writer.close(); //關閉Socket輸出流
68             in.close(); //關閉Socket輸入流
69             socket.close(); //關閉Socket
70             server.close(); //關閉ServerSocket
71         }catch(Exception e) {//出錯,打印出錯信息
72             System.out.println("Error."+e);
73         }
74     }
75 }

2、搭建客戶器端code

a)、建立Socket對象,指明須要鏈接的服務器的地址和端口。server

b)、創建鏈接後,經過輸出流向服務器發送請求信息。對象

c)、經過輸入流獲取服務器的響應信息。blog

d)、關閉響應資源

 1 package socket;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStream;
 6 import java.io.InputStreamReader;
 7 import java.io.PrintWriter;
 8 import java.net.InetAddress;
 9 import java.net.Socket;
10 import java.net.URL;
11 
12 public class SocketClient {
13     // 搭建客戶端
14     public static void main(String[] args) throws IOException {
15         try {
45             // 一、建立客戶端Socket,指定服務器地址和端口
46             // Socket socket=new Socket("127.0.0.1",5200);
47             Socket socket = new Socket("192.168.1.115", 5209);
48             System.out.println("客戶端啓動成功");
49             // 二、獲取輸出流,向服務器端發送信息
50             // 向本機的52000端口發出客戶請求
51             BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
52             // 由系統標準輸入設備構造BufferedReader對象
53             PrintWriter write = new PrintWriter(socket.getOutputStream());
54             // 由Socket對象獲得輸出流,並構造PrintWriter對象
55             //三、獲取輸入流,並讀取服務器端的響應信息 
56             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
57             // 由Socket對象獲得輸入流,並構造相應的BufferedReader對象
58             String readline;
59             readline = br.readLine(); // 從系統標準輸入讀入一字符串
60             while (!readline.equals("end")) {
61                 // 若從標準輸入讀入的字符串爲 "end"則中止循環
62                 write.println(readline);
63                 // 將從系統標準輸入讀入的字符串輸出到Server
64                 write.flush();
65                 // 刷新輸出流,使Server立刻收到該字符串
66                 System.out.println("Client:" + readline);
67                 // 在系統標準輸出上打印讀入的字符串
68                 System.out.println("Server:" + in.readLine());
69                 // 從Server讀入一字符串,並打印到標準輸出上
70                 readline = br.readLine(); // 從系統標準輸入讀入一字符串
71             } // 繼續循環
72             //四、關閉資源 
73             write.close(); // 關閉Socket輸出流
74             in.close(); // 關閉Socket輸入流
75             socket.close(); // 關閉Socket
76         } catch (Exception e) {
77             System.out.println("can not listen to:" + e);// 出錯,打印出錯信息
78         }
79     }
80 
81 }

這是咱們先啓動服務器端,再啓動客戶端(順序不能亂)

 

相關文章
相關標籤/搜索