1. 创建一个Java项目 TestMyServerSocket.
2. 创建一个包 com.weloglog.main
3. 创建一些使用到的类
程序启动类 MyServerSccket : 用来启动程序, 启动之后创建一个进程, 用来监视本机当前端口
监视本机端口进程类 ServerListener : 用来监视本地端口, 当有连接本机端口时会生成一个聊天类 ChatSocket 并把这个聊天类添加到 聊天管理类(单例类)中 ChatManager
聊天类 ChatSocket : 用来发送消息给所以聊天窗口(除过自己)
聊天管理类 ChatManager : 用来收集管理所有聊天窗口
4. 以下为所有类代码:
MyServerSccket.java
packagecom.weloglog.main;public classMyServerSccket {public static voidmain(String[] args) {newServerListener().start();
}
}
View Code
ServerListener.java
packagecom.weloglog.main;importjava.io.IOException;importjava.net.ServerSocket;importjava.net.Socket;importjavax.swing.JOptionPane;public class ServerListener extendsThread {int port = 12345;
@Overridepublic voidrun() {try{//端口 : 1 - 65535
ServerSocket serverSocket = newServerSocket(port);while (true) {//阻塞的方法
Socket socket =serverSocket.accept();//建立连接
JOptionPane.showMessageDialog(null, "有客户端连接到本机12345端口");//将Socket传递给线程
ChatSocket cs = newChatSocket(socket);
cs.start();
ChatManager.getChatManager().add(cs);
}
}catch(IOException e) {
e.printStackTrace();
}
}
}
View Code
ChatSocket.java
packagecom.weloglog.main;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.io.UnsupportedEncodingException;importjava.net.Socket;public class ChatSocket extendsThread {
Socket socket;publicChatSocket(Socket s){this.socket =s;
}//发送消息
public voidout(String out){try{
socket.getOutputStream().write(out.getBytes("UTF-8"));
System.out.println(out);
}catch(IOException e) {
e.printStackTrace();
}
}
@Overridepublic voidrun() {try{
BufferedReader br= newBufferedReader(newInputStreamReader(
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();
}
}
}
View Code
ChatManager.java
packagecom.weloglog.main;importjava.util.Vector;public classChatManager {//单例类
privateChatManager(){}private static final ChatManager cm = newChatManager();public staticChatManager getChatManager(){returncm;
}//存放聊天进程的容器
Vector vector = new Vector();//添加
public voidadd(ChatSocket cs){
vector.add(cs);
}//遍历发送消息
public voidpublish(ChatSocket cs, String out){for (int i = 0; i < vector.size(); i++) {
ChatSocket csChatSocket=vector.get(i);//把不是自己输出
if (!cs.equals(csChatSocket)) {
csChatSocket.out(out);
}
}
}
}
View Code