对等模式的网络聊天室——网络聊天1
**大学
课程
任务书
09/10 学年第 一 学期
***
网络
*** ***
对等模式的网络聊天室 :
——网络聊天
2009年12月 7日 ~ 2009年 12 月 31 日 :
: 网络工程实验室
:**
**
下达任务书日期: 2009 年 12 月 7 日
1.设计目的:
按照网络编程的基本原理,综合运用所学的知识,以小组为单位,设计开发
一个网络应用系统。通过对一个实际问题的分析、设计与实现,将原理与应用相
结合,使学生学会如何把书本上学到的知识用于解决实际问题,培养学生的动手
能力;另一方面,使学生能深入理解和灵活掌握教学内容。 2.设计内容和要求(包括原始数据、技术参数、条件、设计要求等):
采用套接字方式,完成两台计算机的互联。设计要求:
1) 采用套接字方式建立两台计算机的网络聊天;
2) 采用多线程方式;
3) 采用图形化界面;
4) 操作方面、界面友好。
3.设计工作任务及工作量的要求〔包括课程设计计算
书、图纸、
实物样品等〕:
工作任务:
设计对等模式聊天似的网络聊天软件。
工作量的要求:
小组每个成员都需完成独立的功能模块,组长负责协调小组成员,最后联调
成一个完善的应用系统。每人提交一份设计报告。
4.主要参考文献:
1 叶树华,高志红. 网络编程实用教程. 北京:人民邮电出版社,2006
2 汪晓平,钟军. Visual C++网络通信协议与应用实现. 北京:人民邮电出版社,
2003
3 方敏,张彤.网络应用程序设计.安.安电子科技大学出版社,2005
4 黄超.indows下的网络编程.北京.人民邮电出版社,2003
5 耿祥义,张跃平. Java2实用教程. 清华大学出版社,2006
5.设计成果形式及要求:
1.应用软件
2.课程设计说明书
6.工作
及进度:
2009年12 月 7 日 ~ 12 月 11 日 需求分析
12 月12日 ~ 12 月 14 日 概念结构设计、逻辑结构设计
12 月15日 ~ 12 月 26 日 编码调试
12 月27日 ~ 12 月 29 日 联调、测试
12 月30日 ~ 12 月 30 日 撰写报告
12 月31日 ~ 12 月 31 日 成绩考核
系主任审查意见:
签字:
年 月 日
**
: *** ***
: ***
: 网络工程专业
: 对等模式的网络聊天室
——网络聊天
2009 年 12 月 31 日
对等聊天工具实现的是局域网中的聊天功能,其为一个对等的应用,既是服
务器又是客户端,对等聊天工具既可以自动发现在线的伙伴,又可以和在线的伙
伴进行点对点的聊天。主界面中也可以实现对所以在线伙伴的群聊。
根据所学的Java与网络编程知识,采用套接字方式和多线程方式完成两台
计算机的互联并用编码实现连接,完成题目要求的功能,从而达到掌握开发一个
小型的类似于QQ聊天工具的软件。本课程设计利用Socket 套接字实现主机之间的数据通信,并设计一个网上聊天程序,基于UDP的通信。
开发工具:Eclipse,jdk5.0
运行环境:操作系统:Windows 98/2000
我主要的工作是利用同组成员建立好的连接采用套接字和UDP的方式进行数据的传输,实现两台主机之间信息的发送和接收。
对等模式的聊天系统功能模块图如下:
对等聊天的
主程序代码
初始化,广
播登陆信息
运行界面并进自动获取好点对点聊
天模块 友信息并自行网络连接
动更新
图2.1 对等聊天系统功能模块图
软件分为两个模块,建立网络连接和点对点聊天工具。我主要负责网络聊天
部分,实现信息的的发送和接收。
图2.2 程序流程图
详细设计阶段的根本任务是确定应该怎样具体实现所要求的系统,也就是经
过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在系统实现阶段
可以把这个描述直接翻译成用某种程序设计语言书写的程序。把经过总体设计得
到的各个模块详细的加以描述。
实现对等聊天功能,使用UDP建立连接并使用UDP实现好友列
动态刷新,可以单独选择好友进行聊天,也可以进行群聊,即广播信息。
其中系统功能模块图如图3-1所示。
图3.1 单方上线 图3.2 对方也上线
运行软件,在输入框输入想说的话,选中用户列表,或者进行广播,发送出
去的信息在上面的对话框显示,可以实现局域网内两台或者多台电脑的连接,并
进行实时聊天,由于使用的是基于UDP的通信,不受网络的实时通信状态的影响。
发送信息的核心程序代码如下:
private void sendMessage() {//封装一个方法来发送聊天消息
String hostName = (String)PeopleList.getSelectedValue();
if(!(hostName == null) && !(BroadCast.isSelected())) {
//给某个选定的用户发送消息
InetAddress hostAddress = PeopleMap.get(hostName);
String message = inputArea.getText();
this.playArea.setText(playArea.getText()+localname+"
"+"To:"+hostName+"------"+formatter.format(new
Date())+"\n"+this.inputArea.getText()+"\n");
if(message.length() > 0) {
byte [] me = message.getBytes();
DatagramPacket mePacket = new
DatagramPacket(me,me.length,hostAddress,DATA_PORT);
try {dataSocket.send(mePacket);
inputArea.setText("");
} catch (IOException ioe) {
ioe.printStackTrace();
}} else {
JOptionPane.showMessageDialog(mainFrame, "发送消息不
能为空!!!");}}
else if(BroadCast.isSelected()) {
//在组播组内广播消息
String message = inputArea.getText();
if(message.length() > 0) {
byte [] me = ("multi"+message).getBytes();
DatagramPacket castPacket = new
DatagramPacket(me,me.length,multiAddress,MULTICAST_PORT);
try {multiSocket.setLoopbackMode(false);
multiSocket.send(castPacket);
inputArea.setText("");
} catch (SocketException se) {
se.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}} else {
JOptionPane.showMessageDialog(mainFrame, "发送消息不
能为空!!!");
}}
else {
JOptionPane.showMessageDialog(mainFrame,"请选择您要发送
消息的目的地!!!");
}}
接收信息的核心代码如下:
private class ReadChatingThread implements Runnable {
//启动一个线程来读取聊天数据
public void run() {
while(true) {
try {dataSocket.receive(ChatPacket);
String hostName =
ChatPacket.getAddress().getHostName();
String chat = new
String(ChatPacket.getData(),0,ChatPacket.getLength());
//接收到的仅仅是普通的聊天数据
playArea.append("来自:"+hostName+"
------("+formatter.format(new Date())+")\n"+chat+"\n");
} catch (IOException ioe) {
ioe.printStackTrace();
}}//while
}//run
}}
运行程序,在线成员列表中将自动获取本地电脑用户及其它在线用户的网络
地址和用户主机名。
本实验是在一台计算机上测试,如要进行两台计算机的通讯,只需要将两台
电脑连入一个局域网中,在两台电脑上运行程序,及自动进行连接,并自动获取
成员列表,既可以进行简单的聊天。选中在线成员列表就可以与相应用户进行聊
天,在文本框内输入消息,按发送消息,成功发送。
选中用户发送信息成功如图4.1示:
图4.1 双方发送信息成功
当没有选择用户列表中的某个用户时,选中复选框广播时,可以发送给在线
的所有用户。没有选中时,点击发送按钮则显示提示框1,输入信息框中信息为空时,点击发送信息按钮,显示提示框2。
图4.2 提示框1
图4.3 提示框2
当选中广播复选框时,则信息以广播信息发送给所有用户,及所有在线用户
都能收到该广播信息,显示如图4.5:
图4.4 广播信息
课程设计的过程是艰辛的,但是收获却是很大的。这次课程设计我主要是应
用以前学习的网络编程以及Java的一些知识,综合起来才完成了这个网络通讯的软件,虽然软件很小,实现的功能也很有限。
课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知
识有了更进一步的理解和认识。当然,我在课程设计中碰到了很多的问题,我通
过查阅相关书籍,资料,以及上网查资料,特别是得到了许多老师和同学的帮助,
还让我认识到了自己对以前所学知识的不足方面,开拓了自己的思路!
随着社会发展,internent的迅速普及,以及飞速发展,人们对实时通信的
要求越来越迫切,需求日益增加,网络聊天已经成为了一大时尚,不少人都有这
样的经历。用户数据报协议(UDP)是一个无连接协议,使用这种协议时,并不
需要在两台计算机之间建立固定的连接,也就是说,通信双方没有服务器和客户
机之分,它们之间进行的是对等通信。所以它的优势很明显。是现代通信不可或
缺的一部分。这次的课程设计我主要应用所学,通过在Java编程环境下,进行
基于UDP的网上聊天软件的设计,它易于实现两台计算机之间建立固定的连接,
这是它的一大优势。
当然,通过这次课程设计,我也发现了自身的很多不足之处,尤其是对于编
程的过程不熟悉,又加上是去年学习的Java,复习了一次基本知识,在总体规划方面花的时间过长,也不够理想,导致最后软件只实现了一些基本功能,没能
够充分发挥出软件可以实现的功能!而且界面设计也过于简单。在以后的学习中,
我会不断的完善自我,不断进取,能使自己在网络编程这方面有一个大的发展。