1. 建立一個Java項目 TestMyServerSocket.前端
2. 建立一個包 com.weloglog.mainjava
3. 建立一些使用到的類socket
程序啓動類 MyServerSccket : 用來啓動程序, 啓動以後建立一個進程, 用來監視本機當前端口ide
監視本機端口進程類 ServerListener : 用來監視本地端口, 當有鏈接本機端口時會生成一個聊天類 ChatSocket 並把這個聊天類添加到 聊天管理類(單例類)中 ChatManagerthis
聊天類 ChatSocket : 用來發送消息給因此聊天窗口(除過本身)spa
聊天管理類 ChatManager : 用來收集管理全部聊天窗口.net
4. 如下爲全部類代碼:線程
MyServerSccket.javacode
package com.weloglog.main; public class MyServerSccket { public static void main(String[] args) { new ServerListener().start(); } }
ServerListener.javaserver
package com.weloglog.main; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import javax.swing.JOptionPane; public class ServerListener extends Thread { int port = 12345; @Override public void run() { try { //端口 : 1 - 65535 ServerSocket serverSocket = new ServerSocket(port); while (true) { //阻塞的方法 Socket socket = serverSocket.accept(); //創建鏈接 JOptionPane.showMessageDialog(null, "有客戶端鏈接到本機12345端口"); //將Socket傳遞給線程 ChatSocket cs = new ChatSocket(socket); cs.start(); ChatManager.getChatManager().add(cs); } } catch (IOException e) { e.printStackTrace(); } } }
ChatSocket.java
package com.weloglog.main; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.net.Socket; public class ChatSocket extends Thread { Socket socket; public ChatSocket(Socket s){ this.socket = s; } //發送消息 public void out(String out){ try { socket.getOutputStream().write(out.getBytes("UTF-8")); System.out.println(out); } catch (IOException e) { e.printStackTrace(); } } @Override public void run() { try { BufferedReader br = new BufferedReader( new InputStreamReader( socket.getInputStream(),"UTF-8")); String line = null; while((line = br.readLine()) != null){ ChatManager.getChatManager().publish(this, line); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
ChatManager.java
package com.weloglog.main; import java.util.Vector; public class ChatManager { //單例類 private ChatManager(){} private static final ChatManager cm = new ChatManager(); public static ChatManager getChatManager(){ return cm; } //存放聊天進程的容器 Vector<ChatSocket> vector = new Vector<ChatSocket>(); //添加 public void add(ChatSocket cs){ vector.add(cs); } //遍歷發送消息 public void publish(ChatSocket cs, String out){ for (int i = 0; i < vector.size(); i++) { ChatSocket csChatSocket = vector.get(i); //把不是本身輸出 if (!cs.equals(csChatSocket)) { csChatSocket.out(out); } } } }