内容发布更新时间 : 2024/12/24 20:43:39星期一 下面是文章的全部内容请认真阅读。
ClientThread temp = clients.get(i);
clients.remove(i);// 删除此用户的服务线程 temp.stop();// 停止这条服务线程 return; } } } else {
dispatcherMessage(message);// 转发消息 }
} catch (IOException e) { e.printStackTrace(); } } }
其运行截图如下图所示:
(2)、客户端主程序
本程序使用了默认的卡片布局方式,对窗口的大小进行设置,让聊天窗口能
5
够居中显示,以及登录主窗口类。
实现窗口布局功能和类的调用功能的主要代码如下: * 连接服务器 *
* @param port * @param hostIp * @param name */
public boolean connectServer(int port, String hostIp, String name) { // 连接服务器 try {
socket = new Socket(hostIp, port);// 根据端口号和服务器ip建立连接 writer = new PrintWriter(socket.getOutputStream()); reader = new BufferedReader(new InputStreamReader(socket .getInputStream()));
// 发送客户端用户基本信息(用户名和ip地址)
sendMessage(name + \ // 开启接收消息的线程
messageThread = new MessageThread(reader, textArea); messageThread.start();
isConnected = true;// 已经连接上了 return true;
} catch (Exception e) {
textArea.append(\与端口号为:\地址为:\ + \的服务器连接失败!\ isConnected = false;// 未连接上 return false; } }
(5)、 聊天窗口程序设计
程序提供了发送文字和关闭聊天的的简单功能。以下是实现程序的主要方
6
法:
* 发送消息 *
* @param message */
public void sendMessage(String message) { writer.println(message); writer.flush(); } /**
* 客户端主动关闭连接 */
@SuppressWarnings(\
public synchronized boolean closeConnection() { try {
sendMessage(\发送断开连接命令给服务器 messageThread.stop();// 停止接受消息线程 // 释放资源 if (reader != null) { reader.close(); }
if (writer != null) { writer.close(); }
if (socket != null) { socket.close(); }
isConnected = false; return true;
} catch (IOException e1) {
7
e1.printStackTrace(); isConnected = true; return false; } }
其运行截图如下图所示:
8