基于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
歡迎大家一起說出自己的想法。