天天看點

JAVA Socket程式設計(二)之TCP通信

基于TCP(面向連接配接)的socket程式設計,分為用戶端和伺服器端。

用戶端的流程如下:

(1)建立套接字(socket)

(2)向伺服器發出連接配接請求(connect)

(3)和伺服器端進行通信(send/recv)

(4)關閉套接字

伺服器端的流程如下:

(2)将套接字綁定到一個本地位址和端口上(bind)

(3)将套接字設為監聽模式,準備接收用戶端請求(listen)

(4)等待客戶請求到來;當請求到來後,接受連接配接請求,傳回一個新的對應于此次連接配接的套接字(accept)

(5)用傳回的套接字和用戶端進行通信(send/recv)

(6)傳回,等待另一個客戶請求。

(7)關閉套接字。

本文介紹一個多線程的TCP程式設計

1:建立伺服器端并實作線程類  代碼如下

1 package tcp;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.InputStreamReader;
 5 import java.io.PrintWriter;
 6 import java.net.Socket;
 7 
 8 public class Server implements Runnable {//實作一個線程類
 9 private Socket soc;
10     public Server(Socket soc) {
11     super();
12     this.soc = soc;
13 }
14     private BufferedReader in=null;
15     private BufferedReader input=null;//獲得各種流對象
16     PrintWriter out=null;
17     @Override
18     public void run() {
19         // TODO Auto-generated method stub
20         try {
21             in=new BufferedReader(new InputStreamReader(soc.getInputStream()));
22             input=new BufferedReader(new InputStreamReader(System.in));
23             out=new PrintWriter(soc.getOutputStream(),true);//每次都清空輸出流
24             String message;
25             while((message=in.readLine())!=null){
26                 System.out.println(message);//讀取到的用戶端資料
27                 System.out.println("輸入回執的資料:");
28                 out.println(input.readLine());//回執資料
29             }
30         } catch (Exception e) {
31             // TODO: handle exception
32             e.printStackTrace();
33         }finally{
34             try {
35                 in.close();
36                 input.close();//關閉各種流對象
37                 out.close();
38             } catch (Exception e2) {
39                 e2.printStackTrace();
40                 // TODO: handle exception
41             }
42         }
43     }
44 
45 }      

2:建立多線程的啟動類   代碼如下

1 package tcp;
 2 
 3 import java.net.ServerSocket;
 4 import java.net.Socket;
 5 
 6 public class ServerStart {
 7 
 8     public static void main(String[] args) {
 9         // TODO Auto-generated method stub
10         try {
11             ServerSocket server=new ServerSocket(9000);//這隻9000為伺服器段
12             Socket soc=new Socket();
13             while (true) {
14                 soc=server.accept();//監聽端口的連結
15                 new Thread(new Server(soc)).start();//隻要有連結就啟動一個線程
16             }
17         } catch (Exception e) {
18             // TODO: handle exception
19             e.printStackTrace();
20         }
21     }
22 
23 }      

3:建立用戶端的類  代碼如下

1 package tcp;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.InputStreamReader;
 5 import java.io.PrintWriter;
 6 import java.net.Socket;
 7 
 8 public class Client {
 9     private static Socket soc=null;
10     private static BufferedReader in=null;
11     private static BufferedReader input=null;
12     private static PrintWriter out=null;
13     
14     public static void main(String[] args) {
15         // TODO Auto-generated method stub
16         try {
17             soc=new Socket("127.0.0.1",9000);
18             while(true){
19             in=new BufferedReader(new InputStreamReader(soc.getInputStream()));
20             input=new BufferedReader(new InputStreamReader(System.in));
21             out=new PrintWriter(soc.getOutputStream(),true);
22             System.out.println("輸入發送的資料:");
23             String op=input.readLine();
24             out.println(op);
25             if(op.equals("aa")){
26                 break;
27             }
28                 System.out.println(in.readLine());
29             }
30         } catch (Exception e) {
31             // TODO: handle exception
32             e.printStackTrace();
33         }finally{
34             try {
35                 in.close();
36                 input.close();
37                 out.close();
38             } catch (Exception e2) {
39                 // TODO: handle exception
40                 e2.printStackTrace();
41             }
42         }
43     }
44 
45 }      

 udp檢視:http://www.cnblogs.com/GH0522/p/8119289.html

歡迎大家一起說出自己的想法。