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