Java 中使用serversocket通信
2024-10-06 21:08:09
1. 创建一个Java项目 TestMyServerSocket.
2. 创建一个包 com.weloglog.main
3. 创建一些使用到的类
程序启动类 MyServerSccket : 用来启动程序, 启动之后创建一个进程, 用来监视本机当前端口
监视本机端口进程类 ServerListener : 用来监视本地端口, 当有连接本机端口时会生成一个聊天类 ChatSocket 并把这个聊天类添加到 聊天管理类(单例类)中 ChatManager
聊天类 ChatSocket : 用来发送消息给所以聊天窗口(除过自己)
聊天管理类 ChatManager : 用来收集管理所有聊天窗口
4. 以下为所有类代码:
MyServerSccket.java
package com.weloglog.main; public class MyServerSccket { public static void main(String[] args) {
new ServerListener().start();
} }
ServerListener.java
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);
}
}
}
}
最新文章
- Vertical Menu ver4
- 响应性web设计实战总结
- ThinkPHP随笔
- [LintCode] Paint House 粉刷房子
- 定时同步时间与crontab
- hdu 3572 Task Schedule
- Cannot initialise keyboard run ./nano-X
- Linux下配置VNC
- px/em/pt区别和转换
- DOS批处理命令递归删除给定的文件(夹),兼VC工程清理小工具
- PHP与XML技术
- javascript的键盘事件大全
- 学习string,stringBuffer时遇到的问题
- 流式大数据计算实践(3)----高可用的Hadoop集群
- python学习:条件语句if、else
- Thinking in Java from Chapter 10
- redhat7.4 使用centos yum源
- MySQL数据库----数据操作
- JAVA计算文件的crc32校验码
- 六,mysql优化——小知识点