Socket變成的基本步驟(TCP/UDP)
常見socket連接時,可以指定使用的傳輸層協議,socket可以支持不同的傳輸層協議(TCP或UDP),當使用TCP協議進行連接時,該socket連接就是一個TCP連接,Server端所要做的事情主要是建立一個通信的端點,然后等待客戶端發送的請求,典型的處理步驟如下:(服務器端建立連接程序)
1、構建一個ServerSocket實體,指定本地的埠,這個socket就是用來監聽指定埠的連接請求的,
2、重復如下幾個步驟:
a. 呼叫socket的accept()方法來獲得下面客戶端的連接請求,通過accept()方法回傳的socket實體,建立了一個和客戶端的新連接,
b. 通過這個回傳的socket實體獲取InputStream和OutputStream,可以通過這兩個stream來分別讀和寫資料,
c. 結束的時候呼叫socket實體的close()方法關閉socket連接,
客戶端的請求程序稍微有點不一樣:
1、構建socket實體,通過指定的遠程服務器地址和埠來建立連接,
2、通過socket實體包含的InputStream和OutputStream來進行資料的讀寫,
3、操作結束后呼叫socket實體的close方法,關閉,
1 //簡單的 Client/Server程式設計
2 //服務端
3 public class Server{
4 public static void main(String args[]){
5 try{
6 ServerSocket server = null;
7 try{
8 server = new ServerSocket(4700);
9 //創建一個ServerSocket在埠4700監聽客戶請求
10 }catch(Exception e){
11 System.out.println("can not listen to:"+e);
12 //出錯,列印出錯資訊
13 }
14 System.out.ptintln("server------------------------");
15 Socket socket = null;
16 try{
17 socket = server.accept();
18 //使用accept阻塞等待客戶請求,有客戶請求到來則產生一個Socket物件,并繼續執行
19 }catch(Exception e){
20 System.out.println("Error."+e);
21 //出錯,列印出錯資訊
22 }
23 String line;
24 BufferedReader is =new BufferedReader(new InputStreamReader(socket.getInputStream()));
25 //由socket物件得到的輸入流,并構造相應的BufferedReader物件
26 PrintWriter os = new PrintWriter(socket.getOutputStream());
27 //由socket物件得到輸出流,并構造PrintWriter物件
28 BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
29 //由系統標準輸入設備構造BufferedReader物件
30 System.out.println("Client:"+is.readLine());
31 //在標準輸出上列印從客戶端讀入的字串
32 line = sin.readLine();
33 //從標準輸入讀入一字串
34 while(!line.equals("bye")){
35 //如果該字串為"bye",則停止回圈,向客戶輸出該字串
36 os.println(line);
37 //重繪輸出流,使Client馬上受到該字串
38 os.flush();
39 //從Client讀入一字串,并列印到標準輸出上
40 System.out.println("Client:"+is.readLine()+"\n");
41 line = sin.readLine();
42 //從系統標準輸入讀入一字串
43 }//繼續回圈
44 os.close();//關閉Socket輸出流
45 is.close();
46 socket.close();
47 server.close();
48 }catch(Exception e){
49 System.out.println("Error:"+e);
50 }
51 }
52 }
53
54 //客戶端
55 public class Client{
56 public static void main(String args[]){
57 try{
58 Socket socket = new Socket("127.0.0.1",4700);
59 //向本機的4700埠發出客戶請求
60 BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
61 //由系統標準輸入設備構造BufferedReader物件
62 PrintWriter os = new PrintWriter(socket.getOutputStream());
63 //由socket物件得到的輸出流,并構造PrintWriter物件
64 BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
65 System.out.println("Client----------------------------");
66 //由socket物件得到輸入流,并構造相應的BufferedReader
67
68 String readline;
69 readline = sin.readLine();//從系統標準輸入讀入一字串
70 while(!readline.equals("bye")){
71 //若從標準輸入讀入的字串為"bye"則停止回圈
72 os.println(readline);
73 //將從系統標準輸入讀入的字串輸出到Server
74 os.flush();
75 //重繪輸出流,使Server馬上收到該字串
76 System.out.println("Server:"+is.readline());
77 //從Server讀入一字串,并列印到標準輸出上
78 readline = sin.readLine();//從系統標準輸入讀入一字串
79 }//繼續回圈
80 os.close();//關閉socket輸出流
81 is.close();//關閉socket輸入流
82 socket.close();//關閉socket
83 }catch(Exception e){
84 System.out.println("Error:"+e);//出錯,則列印出錯資訊
85 }
86 }
87 }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/24662.html
標籤:其他
