网络实验6Socket编程实现聊天程序(共8页).doc
《网络实验6Socket编程实现聊天程序(共8页).doc》由会员分享,可在线阅读,更多相关《网络实验6Socket编程实现聊天程序(共8页).doc(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上南昌航空大学实验报告 课程名称: 计算机网络 实验名称: Socket编程实现聊天程序 班 级: 班 学生姓名: 杨 望 学号: 指导教师评定: 签 名: 一、 实验目的:1、 掌握网络应用程序的开发方法;2、 掌握Client/ Server结构软件的设计与开发方法3、 掌握Socket机制的工作原理。二、 实验题目:使用Win32 Socket 函数实现聊天程序:能相互对发文本消息。三、 服务端与客户端连接工作流程图:开始监听有新客户端请求连接服务器提示错误信息不允许建立连接允许允许连接?更新用户信息表四、收发消息工作流程图: 监听发送给客户端B是 用户B在上线
2、?用户B在忙碌 ? 用户B在隐身 ?是是 用户B在离线?发送给服务器否向客户端B 发送消息五、 实验代码:1、服务器端:package yuchen;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;import .ServerSocket;import .Socket;import java.util.StringTokenizer;import java.util.Vector;public class Ch
3、atServer static int port = 5566;/端口号static Vector clients = new Vector(10);/存储连接客户信息static ServerSocket server = null; /建立服务器socketstatic Socket socket = null; /套接字连接public ChatServer() try System.out.println(Server start.);server = new ServerSocket(port); /初始化服务器套接字while (true) socket = server.acce
4、pt(); /等待连接System.out.println(socket.getInetAddress()+连接n);/得到客户机地址Client client = new Client(socket);clients.add(client);/增加客户线程到向量中client.start();/启动线程notifyChatRoom(); /监视聊天室连接变化 catch (Exception ex) ex.printStackTrace();/输出出错信息public static void notifyChatRoom() /监视客户端线程StringBuffer newUser = ne
5、w StringBuffer(newUser);for (int i = 0; i clients.size(); i+) Client c = (Client)clients.elementAt(i);newUser.append(:+c.name); /客户端姓名字符串sendClients(newUser);/发送信息到客户端public static void sendClients(StringBuffer message) for (int i= 0 ; i 0 ) /遍历整个VectorClient client = (Client) clients.firstElement()
6、; /得到一个客户端try client.socket.close(); catch(IOException ex) ex.printStackTrace(); / 输出错误信息clients.removeElement(client); /移出客户端public static void disconnect(Client c) / 断开客户端try System.err.println(c.ip+断开连接n); catch (Exception ex) ex.printStackTrace();clients.removeElement(c);c.socket = null;public s
7、tatic void main(String args) new ChatServer();class Client extends Thread Socket socket;/连接端口String name ;/用户姓名String ip; /客户端ip地址BufferedReader reader;/输入流PrintStream ps;/输出流public Client(Socket s) socket = s;try reader = new BufferedReader(new InputStreamReader(s.getInputStream();ps = new PrintStr
8、eam(s.getOutputStream();/得到输出流String info = reader.readLine();/读取接收到的信息StringTokenizer stinfo = new StringTokenizer(info,:); /分解字符串String head = stinfo.nextToken(); /获取关键字System.out.println(stinfo.toString();System.out.println(head);if (stinfo.hasMoreTokens()name = stinfo.nextToken() ;/获取用户名if (stin
9、fo.hasMoreTokens() ip = stinfo.nextToken(); /获取IP地址 catch (IOException ex) ex.printStackTrace();System.out.println(name);System.out.println(ip);public void send (StringBuffer msg) ps.println(msg); /输出信息ps.flush();public void run() while (true) String line = null;try line = reader.readLine();System.o
10、ut.println(line:+line); catch (IOException ex) ex.printStackTrace(); /输出错误信息ChatServer.disconnect(this);/断开连接ChatServer.notifyChatRoom();/更新信息return ;if (line = null) /客户离开ChatServer.disconnect(this);ChatServer.notifyChatRoom();return ;StringTokenizer st = new StringTokenizer(line,:);/分解字符串String ke
11、yword = st.nextToken();if (keyword.equals(MSG) /发送来的聊天信息StringBuffer msg = new StringBuffer(MSG:);msg.append(name); /在信息上增加用户名msg.append(st.nextToken(0n);ChatServer.sendClients(msg);/发送聊天语句到各个客户端System.out.println(msg); else if (keyword.equals(quit) /退出命令ChatServer.disconnect(this); /断开连接ChatServer.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 实验 Socket 编程 实现 聊天 程序
限制150内