1 南昌航空大学实验报告 课程名称: 计算机网络 实验名称: Socket 编程实现聊天程序 班 级: 090451 班 学生姓名: 杨 望 学号: 09045131 指导教师评定: 签 名: 一、 实验目的: 1、 掌握网络应用程序的开发方法; 2、 掌握 Client/ Serv er 结构软件的设计与开发方法 3、 掌握 Socket 机制的工作原理。 二、 实验题目: 使用 Win32 Socket 函数实现聊天程序:能相互对发文本消息。 三、 服务端与客户端连接工作流程图: 四、收发消息工作流程图: 开始 监听 有新客户端请 求连接服务器 提示错误信息 不允许 建立连接 允许 允许连接? 更新用户信息 2 五、 实验代码: 1、服务器端: package yuchen; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import java.util.StringTokenizer; import java.util.Vector; public class ChatServer { static int port = 5566;//端口号 static Vector clients = new Vector(10);//存储连接客户信息 static ServerSocket server = null; //建立服务器 socket static Socket socket = null; //套接字连接 public ChatServer() { try {System.out.println("Server start..."); server = new ServerSocket(port); //初始化服务器套接字 while (true) { socket = server.accept(); //等待连接 System.out.println(socket.getInetAddress()+"连接\n");//得到客户机地址 Client client = new Client(socket); 监听 发送给 客户端 B 是 用户 B 在上线 ? 用户 B 在忙碌 ? 用户 B 在隐身 ? 是 是 用户 B 在离线? 发送给服务器 否 向客户端 B 发送消息 3 clients.add(client);//增加客户线程到向量中 client.start();//启动线程 notifyChatRoom(); //监视聊天室连接变化} } catch (Exception ex) { ex.printStackTrace();//输出出错信息}} public static void notifyChatRoom() { //监视客户端线程 StringBuffer newUser = new StringBuffer("newUser"); for (int i = 0; i < clients.size(); i++) { Client c = (Client)clients.elementAt(i); newUse...