五、设计思想:
传输层协议有两种:
TCP和UDP,TCP是可靠传输,它把信息包捆绑,在必要的时候,排序和重传这些信息包以获得可靠的数据传输。
UDP支持快速的、无连接的、不可靠的信息包传输。
在JAVA中,使用TCP传输,其套接字的封装函数分TCP/IP客户套接字和
TCP/IP服务器套接字。
本程序使用TCP做,采用了JAVA中的流式
Socket的通信机制,流式Socket通信过程如下图:
客户套接字函数:
Socket(Stringhostname,itnport)或
Socket(InetAddressipAddress,intport)
服务端套接字函数:
ServerSocket(intport)
ServerSocket(intport,intmaxQueue)
ServerSocket(intport,intmaxQueue,InetAddresslocalAddress)
六、文件说明:
文件清单:
(1)客户端线程主类:
chatappletthree
publicclasschatserverthreeimplementsRunnable
{/*聊天室服务器端处理主类*/
//服务器构造初始化线程
publicchatserverthree()
{}
//服务器main()初始化
publicstaticvoidmain(Stringargs[])
{}
//服务器线程connect操作run方法
publicvoidrun()
{}
//向聊天室所有人员发送普通话语信息
publicvoidbroadcast(Stringmsg)
{}
//处理悄悄话,向特定人员发送悄悄话
publicvoidbroadcast1(Stringmsg)
{}
//客户端线程类firstthread
classfirstthreadextendsThread
{}
//firstthread初始化线程
publicfirstthread(chatserverthreeserver,Socketclient)
{}
//监听运行线程
publicvoidrun()
{while(true){
line=in.readUTF();//line读取来自客户端线路的信息
//线路信息前端为PEOPLE表明有新人进入了聊天室if(line.startsWith("PEOPLE")){}
//线路信息前端为QUIT表明有人离开了聊天室
elseif(line.startsWith("QUIT")){}
//线路前端为MSG表明接收到的是普通聊天话语信息
elseif(line.startsWith("MSG")){}
//线路前端为“悄悄的对”表明接收到的是悄悄话
elseif(line.startsWith("悄悄地对")){}
//线路前端为newlist表明得到客户端刷新列表的请求
elseif(line.startsWith("newlist")){}
}
}
(2)聊天室界面AWT面板类:
Apanel:
/*聊天室界面北部面板Apanel类*/
classApanelextendsPanel//用于构造面板
{}
Bpanel:
/*聊天室界面中部面板Bpanel类*/
classBpanelextendsPanel
{}
Cpanel:
/*聊天室界面南部面板Cpanel类*/classCpanelextendsPanel
{}
(3)发送悄悄话弹出式窗口类:
Mywindow:
classMywindowextendsFrameimplementsActionListener
{
//构造方法初始化画出弹出式窗口界面Mywindow()
{}
//处理按钮事件的方法
publicvoidactionPerformed(ActionEvente)
{}
}
(4)服务器端线程类:
Chatserverthree:
/*聊天室主类chatappletthree类*/
publicclasschatappletthreeextendsAppletimplementsRunnable,ActionListener,ItemListener{
//Applet启动初始化画出聊天室界面,建立与服务器连接
publicvoidinit(){}
//启动线程
publicvoidstart()
{}
//终止线程
publicvoidstop(){}
//关闭监听端口,断开连接
publicvoiddestroy(){}
//客户端启动线程
publicvoidrun(){}
}(4)服务器为每一个客户端启动的线程类
Firstthread
//客户端线程类firstthread
classfirstthreadextendsThread
{
protectedSocketclient;
//listen读取来自客户端的消息:
name格式为:
PEOPLE+名字+[性别]Stringline,name;
protectedDataOutputStreamfirstout,out;//定义网络数据输出流protectedchatserverthreeserver;
protectedDataInputStreamin;//定义网络数据输入流
//firstthread初始化线程
publicfirstthread(chatserverthreeserver,Socketclient)
{
Bc袈fc≡κ⅛)
OOOOOOOOOOOOAUωω'LuωωωlllU①AJ①SH」①AJ①sωlll
这是群聊,单击[聊天记录]可以获取聊天记录。
单击[刷新谈话区]
可以刷新聊天区域,[单击刷新聊天者列表]可以刷新聊天者列表。
双击聊天者列表中的昵称,可以弹出悄悄话窗口进行私聊
八、实验总结:
做这个课程设计时,大部分人都是用VC做的,VC里面直接封装了一些Socket函数,但是我觉得用java做更好,因为它的界面更友好,而且java里面也封装了Socket函数,且分为TCP和数据报的两种不同的Socket封装函数,程序员可方便的选择所需的函数。
通过这次的课程设计,更好的理解了套接字的作用,它就相当于一个插口,理解标准协议的任何线路端都能插入套接字并与之通信,它对应应用服务程序,相当于不同应用服务程序的地址,通过它来分别同一IP地址的不同应用服务程序。
在做这个程序时,因为我是采用java做的,所以我是用多线程机制实现的,这可以多个不同的线程同时运行。
计算机网络课程设计
——网络聊天程序
学院:
班级:
姓名:
学号:
信息工程软件工程二班杨睿200505070210