Java 多客戶端通信服務端代碼介紹
作者:佚名
Java 多客戶端通信需要我們不斷的學習,在學習的過程中不斷的問題會讓我們十分頭痛,下面我們就看看相關問題的解決方案。
Java 多客戶端通信在很多人看來是一項很繁瑣的工作,其實我們在編寫代碼的時候只要是注意留心Java 多客戶端通信的源代碼就能發現,我們認為枯燥的東西其實都很簡單。
來看服務端的代碼:
- import java.net.*;
- import java.io.*;
- import java.util.*;
- public class Jserver3 {
- private ServerSocket server;
- List sManager = new ArrayList();
- public Jserver3(){}
- void startServer() //運行服務器
- {
- try
- {
- server=new ServerSocket(719);
- System.out.println("服務器套接字已創建成功!");
- while(true)
- {
- Socket socket=server.accept();
- System.out.println("已經與客戶端連接");
- new J_Thread(socket).start();
- sManager.add(socket);
- System.out.println("當前客戶端連結數:"+sManager.size());
- }
- }catch(Exception e){}finally
- {
- try
- {
- server.close();
- }catch(Exception e){}
- }
- }
- public static void main(String[] args) {
- Jserver3 server=new Jserver3();
- server.startServer();
- }
- class J_Thread extends Thread //與客戶端進行通信的線程類
- {
- Socket socket; //套接字引用變量
- private DataInputStream reader; //套接字輸入流
- private DataOutputStream writer; //套接字輸出流
- J_Thread(Socket socket) //構造函數
- {
- this.socket=socket;
- }
- public void run()
- {
- try
- {
- reader=new DataInputStream(socket.getInputStream());//獲取套接字的輸入流
- writer=new DataOutputStream(socket.getOutputStream());//獲取套接字的輸出流
- String msg;
- while((msg=reader.readUTF())!=null)//如果收到客戶端發來的數據
- {
- //向客戶端發送信息
- writer.writeUTF("您的情書已經收到");
- writer.flush();
- System.out.println("來自客戶端:"+msg);
- }
- }catch(Exception e){}finally
- {
- try
- {
- sManager.remove(socket); //刪除套接字
- //關閉輸入輸出流及套接字
- if(reader!=null)reader.close();
- if(writer!=null)writer.close();
- if(socket!=null)socket.close();
- reader=null;
- writer=null;
- socket=null;
- System.out.println("客戶端離開");//向屏幕輸出相關信息
- System.out.println("當前客戶端的連接數:"+sManager.size());
- }catch(Exception e){}
- }
- }
- }
- }
- import java.net.*;
- import java.io.*;
- import java.util.*;
- public class Jserver3 {
- private ServerSocket server;
- List sManager = new ArrayList();
- public Jserver3(){}
- void startServer() //運行服務器
- {
- try
- {
- server=new ServerSocket(719);
- System.out.println("服務器套接字已創建成功!");
- while(true)
- {
- Socket socket=server.accept();
- System.out.println("已經與客戶端連接");
- new J_Thread(socket).start();
- sManager.add(socket);
- System.out.println("當前客戶端連結數:"+sManager.size());
- }
- }catch(Exception e){}finally
- {
- try
- {
- server.close();
- }catch(Exception e){}
- }
- }
- public static void main(String[] args) {
- Jserver3 server=new Jserver3();
- server.startServer();
- }
- class J_Thread extends Thread //與客戶端進行通信的線程類
- {
- Socket socket; //套接字引用變量
- private DataInputStream reader; //套接字輸入流
- private DataOutputStream writer; //套接字輸出流
- J_Thread(Socket socket) //構造函數
- {
- this.socket=socket;
- }
- public void run()
- {
- try
- {
- reader=new DataInputStream(socket.getInputStream());//獲取套接字的輸入流
- writer=new DataOutputStream(socket.getOutputStream());//獲取套接字的輸出流
- String msg;
- while((msg=reader.readUTF())!=null)//如果收到客戶端發來的數據
- {
- //向客戶端發送信息
- writer.writeUTF("您的情書已經收到");
- writer.flush();
- System.out.println("來自客戶端:"+msg);
- }
- }catch(Exception e){}finally
- {
- try
- {
- sManager.remove(socket); //刪除套接字
- //關閉輸入輸出流及套接字
- if(reader!=null)reader.close();
- if(writer!=null)writer.close();
- if(socket!=null)socket.close();
- reader=null;
- writer=null;
- socket=null;
- System.out.println("客戶端離開");//向屏幕輸出相關信息
- System.out.println("當前客戶端的連接數:"+sManager.size());
- }catch(Exception e){}
- }
- }
- }
- }
嘎嘎 在這段代碼里,服務端MM為每一個連接的客戶端GG分配一個單獨的線程,而每一個線程里都持有對應的客戶端GG的Java 多客戶端通信對象。SO,通過這些多線程,服務端MM就練就了一心N用的功力,可以同時接受N個客戶端GG發來的情書了(,真的太賤了。。。。)
客戶端的代碼和上面的客戶端代碼一模一樣的,這里就不多說啦!
【編輯推薦】
責任編輯:張浩
來源:
博客園