(6)優化TCP編寫 服務器端同時支持多個客戶端同時訪問


使用線程池實現服務器端,可以支持同一時間多個客戶端發起的請求

一.編寫TCP協議服務端

 1 package demo.soket.tcp;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.net.ServerSocket;
 6 import java.net.Socket;
 7 import java.util.concurrent.ExecutorService;
 8 import java.util.concurrent.Executors;
 9 
10 public class TcpService1 {
11 
12     public static void main(String args[]) {
13         System.out.println("tcp服務器啟動......");
14         //創建可緩存的線程池
15         ExecutorService executor=Executors.newCachedThreadPool();
16         ServerSocket service=null;
17         try {
18             //創建服務器連接
19             service=new ServerSocket(8080);
20             while(true) {
21                 final Socket accept=service.accept();//阻塞
22                 executor.execute(new Runnable() {
23                     public void run() {
24                         try {
25                             InputStream in = accept.getInputStream();
26                             //將字節流轉換為字符串
27                             byte[] b=new byte[1024];
28                             int len=in.read(b);
29                             String str=new String(b,0,len);
30                             System.out.println("服務器接收客戶端內容:"+str);
31                         } catch (IOException e) {
32                             e.printStackTrace();
33                         }
34                     
35                     }
36                 });
37             
38             }
39         } catch (IOException e) {
40             e.printStackTrace();
41         }finally {
42             if(service!=null) {
43                 try {
44                     service.close();
45                 } catch (IOException e) {
46                     e.printStackTrace();
47                 }
48             }
49         }
50     }
51 
52 }

 

二.編寫TCP協議客服端

客服端一:

package demo.soket.tcp;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class TcpClient1 {
    public static void main(String[] args) {
        try {
            Socket client=new Socket("127.0.0.1", 8080);
            OutputStream os=client.getOutputStream();
            os.write("我是客戶端一".getBytes());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

客服端二:

package demo.soket.tcp;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class TcpClient2 {
    public static void main(String[] args) {
        try {
            Socket client=new Socket("127.0.0.1", 8080);
            OutputStream os=client.getOutputStream();
            os.write("我是客戶端二".getBytes());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

瀏覽器模擬客戶端三:

http://127.0.0.1:8080/

三 .demo運行

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM