Java中利用socket实现简单的服务端与客户端的通信(基础级)
生活随笔
收集整理的這篇文章主要介紹了
Java中利用socket实现简单的服务端与客户端的通信(基础级)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在上一篇文章中,簡單的介紹了java中入門級的socket編程,簡單的實(shí)現(xiàn)了客戶端像服務(wù)器端發(fā)送數(shù)據(jù),服務(wù)器端將數(shù)據(jù)接收并顯示在控制臺,沒有涉及多線程。上一篇文章的鏈接:Java中利用socket實(shí)現(xiàn)簡單的服務(wù)端與客戶端的通信(入門級)
這次,我們將上一節(jié)中的代碼進(jìn)行少許的更改,將服務(wù)器更改為多線程,使得服務(wù)器可以為多個客戶端服務(wù)。
因?yàn)槭欠?wù)器端實(shí)現(xiàn)的多線程,所以客戶端的代碼不用做任何更改,和上一篇中的一樣。只需要對服務(wù)端的代碼進(jìn)行稍許更改即可。
在項目中新建一個類,這個類就是線程類,所以要繼承自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();} //啟動緩沖區(qū) //out = new PrintWriter(client.getOutputStream()); while (true) { String msg=null;try {msg = in.readLine();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} // 將客戶端發(fā)送來的信息存儲在msg中 System.out.println(msg); if (msg.equals("shutdown")) { //客戶端如果發(fā)送的是shutdown,就關(guān)閉客戶端break; } }try {in.close();socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} //執(zhí)行相應(yīng)的關(guān)閉操作 }} 在上述代碼中,MyThread的構(gòu)造函數(shù)將socket傳入類內(nèi)部的socket中,同時,將通信的 主要任務(wù)都寫在了這個線程類中。以下是主類中的代碼:
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來啟動服務(wù)器,并指定端口號System.out.println("服務(wù)器啟動。。。");int count=0;while(true){Socket socket = server.accept(); //獲取客戶端的socket信息MyThread mythread=new MyThread(socket);mythread.start();count++;System.out.println("客戶端數(shù)量為:"+count);}//server.close(); //PrintWriter out = null; //} } }可以看到,此次在服務(wù)端加了一個沒有退出條件的循環(huán)操作,循環(huán)中監(jiān)聽網(wǎng)絡(luò)中的socket信息,當(dāng)有客戶端連接的時候,就講這個socket傳給一個線程去執(zhí)行,同時顯示出目前連接到服務(wù)端的客戶端的數(shù)量。測試時,先運(yùn)行服務(wù)端,然后打開兩次客戶端,分別像服務(wù)端發(fā)送數(shù)據(jù),可以看到服務(wù)端可以顯示出連接的客戶端的數(shù)量,并且可以正常的顯示客戶端發(fā)送過來的數(shù)據(jù)。
總結(jié)
以上是生活随笔為你收集整理的Java中利用socket实现简单的服务端与客户端的通信(基础级)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java中利用socket实现简单的服务
- 下一篇: Java中利用socket实现简单的服务