Java中利用socket实现简单的服务端与客户端的通信(基础级)
生活随笔
收集整理的這篇文章主要介紹了
Java中利用socket实现简单的服务端与客户端的通信(基础级)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在上一篇文章中,簡單的介紹了java中入門級的socket編程,簡單的實現了客戶端像服務器端發送數據,服務器端將數據接收并顯示在控制臺,沒有涉及多線程。上一篇文章的鏈接:Java中利用socket實現簡單的服務端與客戶端的通信(入門級)
這次,我們將上一節中的代碼進行少許的更改,將服務器更改為多線程,使得服務器可以為多個客戶端服務。
因為是服務器端實現的多線程,所以客戶端的代碼不用做任何更改,和上一篇中的一樣。只需要對服務端的代碼進行稍許更改即可。
在項目中新建一個類,這個類就是線程類,所以要繼承自Thread類,該類的代碼如下:
package server_1;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket;public class MyThread extends Thread {//Socket socket=null;public MyThread(Socket socket) throws Exception{this.socket=socket;}public void run(){BufferedReader in = null; try {in = new BufferedReader(new InputStreamReader(socket.getInputStream()));} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} //啟動緩沖區 //out = new PrintWriter(client.getOutputStream()); while (true) { String msg=null;try {msg = in.readLine();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} // 將客戶端發送來的信息存儲在msg中 System.out.println(msg); if (msg.equals("shutdown")) { //客戶端如果發送的是shutdown,就關閉客戶端break; } }try {in.close();socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} //執行相應的關閉操作 }} 在上述代碼中,MyThread的構造函數將socket傳入類內部的socket中,同時,將通信的 主要任務都寫在了這個線程類中。以下是主類中的代碼:
package server_1;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class server_1 { public static void main(String[] args) throws Exception { //將異常全部拋出 ServerSocket server = new ServerSocket(10000); //用serversocket來啟動服務器,并指定端口號System.out.println("服務器啟動。。。");int count=0;while(true){Socket socket = server.accept(); //獲取客戶端的socket信息MyThread mythread=new MyThread(socket);mythread.start();count++;System.out.println("客戶端數量為:"+count);}//server.close(); //PrintWriter out = null; //} } }可以看到,此次在服務端加了一個沒有退出條件的循環操作,循環中監聽網絡中的socket信息,當有客戶端連接的時候,就講這個socket傳給一個線程去執行,同時顯示出目前連接到服務端的客戶端的數量。測試時,先運行服務端,然后打開兩次客戶端,分別像服務端發送數據,可以看到服務端可以顯示出連接的客戶端的數量,并且可以正常的顯示客戶端發送過來的數據。
總結
以上是生活随笔為你收集整理的Java中利用socket实现简单的服务端与客户端的通信(基础级)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java中利用socket实现简单的服务
- 下一篇: Java中利用socket实现简单的服务