首页>代码>java swing通过socket设计类似qq聊天室,刚学习网络编程的可以学习下>/chat/src/com/wenqier/chat/server/ServerConnection.java
package com.wenqier.chat.server; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import javax.swing.JOptionPane; import com.wenqier.chat.util.XMLUtil; public class ServerConnection extends Thread { private ServerSocket serverSocket; private Server server; public ServerConnection(Server server, int port) { try { this.server = server; this.serverSocket = new ServerSocket(port); // 下面两行代码不能放到上面一行代码之前 // 因为服务器启动时有可能会抛出异常 // 如果放在上面,则发生异常时也会导致label上的文本发生变化 // 这与实际情况不符 this.server.getJLabel2().setText("运行"); this.server.getJButton().setEnabled(false); } catch(Exception ex) { ex.printStackTrace(); JOptionPane.showMessageDialog(this.server, "端口号被占用!", "警告", JOptionPane.ERROR_MESSAGE); } } @Override public void run() { while(true) { try { Socket socket = this.serverSocket.accept(); InputStream is = socket.getInputStream(); OutputStream os = socket.getOutputStream(); byte[] buf = new byte[5000]; int length = is.read(buf); //客户端发来的连接信息(包括了用户名) String loginXML = new String(buf, 0, length); // 从客户端登录数据中提取出用户名信息(username) String username = XMLUtil.extractUsername(loginXML); String loginResult = null; // 判断用户是否登录成功 boolean isLogin = false; // 判断用户名是否重复 // 用户名重复 if(this.server.getMap().containsKey(username)) { loginResult = "failure"; } // 用户名不重复 else { loginResult = "success"; isLogin = true; } String xml = XMLUtil.constructLoginResultXML(loginResult); os.write(xml.getBytes()); // 如果用户登录成功,启动线程 if(isLogin) { // 准备创建新的线程,用于处理用户的聊天数据,每一个连接上的用户都会对应一个该线程 ServerMessageThread serverMessageThread = new ServerMessageThread(this.server, socket); //将用户名及与之对应的线程对象 放到Map中 this.server.getMap().put(username, serverMessageThread); //更新用户列表(服务器端+客户端) serverMessageThread.updateUserList(); serverMessageThread.start(); } } catch(Exception ex) { ex.printStackTrace(); } } } }

13133117021 LV5
2024年12月26日
zeng1206 LV7
2023年12月28日
hentai233 LV1
2023年11月17日
vitcheu LV1
2023年5月27日
Kevin_001 LV6
2022年7月3日
wxh1234567 LV4
2022年6月20日
106sadadwd LV2
2022年6月18日
haneri LV1
2022年6月5日
GaaraNi LV1
2022年4月21日
炸蝎子奥特 LV1
2022年2月12日

13133117021 LV5
2024年12月26日
Reach_hehe LV1
2024年12月6日
qwertasdfgkwuejwjwjw LV1
2024年6月27日
ethan_
2024年5月29日
暂无贡献等级
28128觅北 LV2
2024年5月22日
krispeng LV14
2024年4月15日
woldxy LV12
2024年4月1日
taoshen95 LV16
2024年1月18日
zeng1206 LV7
2023年12月28日
陈小灏 LV18
2023年12月27日