版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、XX 大 学 实 验 报 告年 月 日 课题名称: 计算机网络实验名称:SOCKET编程实现聊天程序 班级:姓名: 同组人: 指导老师评定: 签名: 一、实验目的1、掌握网络应用程序的开发方法;2、掌握Client/ Server结构软件的设计与开发方法;3、掌握Socket机制的工作原理;4、会利用编程的方法实现Socket的工作机制,实现聊天程序。二、实验前的准备 1、阅读教材关于TCP/IP协议和Socket的相关内容;2、阅读WinSock编程指南;3、阅读本实验所附内容; 4、熟悉Eclipse开发工具。三、实验内容使用Win32 Socket 函数实现聊天程序:能相互对发文本消息。
2、四、实验步骤和实验源程序 实验步骤: 1、打开java设计软件Elipse,分别建立两个新工程,取名为TalkProject; 2、在刚建立的工程下建里两个类ChatServer和ChatClient; 3、在两个类下分别编写源程序,利用Socket实现聊天软件; 4、运行服务器程序后,再运行客户端程序,就可以实现聊天了。实验源代码: ChatServer:import java.io.*;import .*;import java.util.*;public class ChatServer boolean started = false;ServerSocket ss = null;Lis
3、t clients =Collections.synchronizedList(new ArrayList();/List clients =Collections.synchronized(new ArrayList();/clients是共享变量,通过Collections.synchronized()做同步化处理public static void main(String args) new ChatServer().start();public void start() try ss = new ServerSocket(8888); / 创建一个监听Socket对象started =
4、 true; catch (IOException e) e.printStackTrace();try while (started) Socket s = ss.accept(); / 等待客户端发起连接Client c = new Client(s);System.out.println(a client connected!);new Thread(c).start(); / 启动线程clients.add(c); / 向共享变量中添加ss.close(); / 关闭Socket catch (IOException e) e.printStackTrace();class Clien
5、t implements Runnable / 实现Runnable接口private Socket s;private DataInputStream dis = null;private DataOutputStream dos = null;private boolean Connected = false;public Client(Socket s) this.s = s;try dis = new DataInputStream(s.getInputStream(); / 创建输入流dos = new DataOutputStream(s.getOutputStream(); /
6、创建输出流Connected = true; catch (IOException e) e.printStackTrace();public void send(String str) try dos.writeUTF(str); / 向输入流中写入数据 catch (IOException e) clients.remove(this); / 出错时(客户可能已断线),移除一个客户端public void run() try while (Connected) String str = dis.readUTF(); / 从输出流中读取数据 synchronized(clients) / 对
7、共享的列表进行遍历时必须要同步化Iterator it = clients.iterator();/ 返回一个迭代器while(it.hasNext() Client c = it.next();c.send(str);/ 将数据发送出去/while /synchronized /while(Connected)dis.close();/ 关闭输入流dos.close();/ 关闭输出流s.close();/ 关闭Socket catch (Exception e) System.out.println(Client closed!); finally clients.remove(this)
8、; / 确保线程结束时从共享变量中删除自己(比如从客户机读数据时出错, / 客户机可能已掉线,线程会结束) /try/runChatClient:import java.awt.*;import java.awt.event.*;import java.io.*;import .*;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JButton;public class ChatClient extends Frame Socket s = null;DataOutputStream dos = n
9、ull;DataInputStream dis = null;private boolean Connected = false;TextField tf = new TextField();TextArea ta1 = new TextArea();TextArea ta2 = new TextArea();Button bt1 = new Button(发送);Thread thread = new Thread(new ClientThread();/ 创建线程public static void main(String args) new ChatClient().call();pub
10、lic void call() bt1.setBackground(Color.cyan);setLocation(400, 300);setSize(400, 300);setLayout(null);/ 取消布局管理器setBackground(Color.cyan);tf.setBounds(250, 40, 70, 25);ta1.setBounds(30, 40, 200, 80);ta2.setBounds(30, 140, 200, 80);bt1.setBounds(265, 250, 70, 30);tf.setBounds(30, 240, 200, 35);tf.addA
11、ctionListener(new MyListener();/ 注册事件监听器add(tf);add(bt1);add(ta1);add(ta2);add(tf);this.addWindowListener(new WindowAdapter() / 关闭窗口public void windowClosing(WindowEvent e) disconnect();System.exit(0););bt1.addActionListener(new MyListener();/ 注册事件监听器setVisible(true);connect();thread.start();/ 启动线程p
12、ublic void connect() try s = new Socket(127.0.0.1, 8888);dos = new DataOutputStream(s.getOutputStream();/ 返回一个输出流dis = new DataInputStream(s.getInputStream();/ 返回一个输入流System.out.println(connected!);Connected = true; catch (Exception e) e.printStackTrace(); public void disconnect() try dos.close();/
13、关闭输出流dis.close();/ 关闭输入流s.close();/ 关闭Socket catch (IOException e) e.printStackTrace();private class MyListener implements ActionListener public void actionPerformed(ActionEvent e) String str = tf.getText().trim();/ 获取文本框中的数据tf.setText();ta2.append(str+n);/ 将文本框中的数据添加到文本区中try dos.writeUTF(str);/ 向输出流中写入数据dos.flush();/ 刷空流 catch (IOException e1) e1.pr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《LOGO标志设计》课件
- 牙齿抛光病因介绍
- 牙源性上颌窦炎病因介绍
- 开题报告:智能技术赋能的智慧生成性教学模式设计研究
- 铁路站房水电安装工程施工组织设计
- 开题报告:以文化人:大学红色文化育人体系研究
- 开题报告:新型城镇化背景下传统村落文化记忆的教育传承研究
- 开题报告:新时代儿童格局培育的时空路径研究
- 北京某高压燃气工程施工组织设计方案
- 2024年度健身器材采购与安装协议
- DB4403-T 242-2022可移动模块化厨房建设与管理规范
- 主题班会-文明用语课件
- 独立基础和筏板基础施工方案
- (完整)世界地理概况ppt
- 《茶馆》-精讲版课件
- 2021年省交通控股集团有限公司校园招聘笔试试题及答案解析
- 国开作业管理学基础#-第三章 本章自测题66参考
- 2022社会信誉承诺书(8篇)
- 初中数学北师大八年级上册 位置与坐标平面直角坐标系中的面积问题【教学设计】
- 纯水站日常操作作业指导书
- 设备检修维护记录表
评论
0/150
提交评论