北京邮电大学软件工程实训项目报告Word格式文档下载.docx

上传人:b****1 文档编号:1560669 上传时间:2023-04-30 格式:DOCX 页数:19 大小:218.06KB
下载 相关 举报
北京邮电大学软件工程实训项目报告Word格式文档下载.docx_第1页
第1页 / 共19页
北京邮电大学软件工程实训项目报告Word格式文档下载.docx_第2页
第2页 / 共19页
北京邮电大学软件工程实训项目报告Word格式文档下载.docx_第3页
第3页 / 共19页
北京邮电大学软件工程实训项目报告Word格式文档下载.docx_第4页
第4页 / 共19页
北京邮电大学软件工程实训项目报告Word格式文档下载.docx_第5页
第5页 / 共19页
北京邮电大学软件工程实训项目报告Word格式文档下载.docx_第6页
第6页 / 共19页
北京邮电大学软件工程实训项目报告Word格式文档下载.docx_第7页
第7页 / 共19页
北京邮电大学软件工程实训项目报告Word格式文档下载.docx_第8页
第8页 / 共19页
北京邮电大学软件工程实训项目报告Word格式文档下载.docx_第9页
第9页 / 共19页
北京邮电大学软件工程实训项目报告Word格式文档下载.docx_第10页
第10页 / 共19页
北京邮电大学软件工程实训项目报告Word格式文档下载.docx_第11页
第11页 / 共19页
北京邮电大学软件工程实训项目报告Word格式文档下载.docx_第12页
第12页 / 共19页
北京邮电大学软件工程实训项目报告Word格式文档下载.docx_第13页
第13页 / 共19页
北京邮电大学软件工程实训项目报告Word格式文档下载.docx_第14页
第14页 / 共19页
北京邮电大学软件工程实训项目报告Word格式文档下载.docx_第15页
第15页 / 共19页
北京邮电大学软件工程实训项目报告Word格式文档下载.docx_第16页
第16页 / 共19页
北京邮电大学软件工程实训项目报告Word格式文档下载.docx_第17页
第17页 / 共19页
北京邮电大学软件工程实训项目报告Word格式文档下载.docx_第18页
第18页 / 共19页
北京邮电大学软件工程实训项目报告Word格式文档下载.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

北京邮电大学软件工程实训项目报告Word格式文档下载.docx

《北京邮电大学软件工程实训项目报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《北京邮电大学软件工程实训项目报告Word格式文档下载.docx(19页珍藏版)》请在冰点文库上搜索。

北京邮电大学软件工程实训项目报告Word格式文档下载.docx

目的:

通过IMS、Socket、JIAN-SIP了解传输层及应用层通信原理及传输机制,实际动手开发基于Socket客户服务器模式的信息传输,在此基础上最终实现基于JIAN-SIP协议的聊天室的开发。

要求:

设计一个基于B/S模式的即时聊天系统,可以通过代理服务器完成用户注册、数据传输、好友状态更新、两人及多人文字聊天等功能。

二.实训项目开发环境

✧EclipseVersion:

4.2.0

✧Windowsxp

三.实训项目内容

系统分析

✧本系统在前面学习Socket编程基础上利用JIAN-SIP协议开发聊天室系统。

因此需要充分理解传输层通信协议的基础上利用JIAN-SIP二次开发。

✧首先分析一下Socket编程原理,以便更好的JIAN-SIP开发,Socket编程以服务器等待客户端请求建立连接方式。

当服务器接收到客户的请求创建一个套接字,基于此进行相互通信,在服务器及客户端创建响应的接收及发送buffer,客户与服务器分别建立基于buffer的监听,完成信息的接收,当有新信息发送时放入发送buffer中进行传输。

✧JIAN-SIP协议基于Socket编程机制,是Socket的上一层,主要利用

Socket传输并且封装了调用Socket的类。

从应用方面JIAN-SIP更方便实现移动IP传输、基于视频、音频等通信。

JIAN-SIP协议主要通过客户服务器的应答、响应实现通信,在应答与响应基础上创建事件及对话功能。

整个传输以栈为基础,通过消息的拼装实现传输。

✧在聊天室系统中客户端要借助代理服务器实现与多人通信,代理服务器起着中间媒介的作用。

客户端通过代理服务器来找到实际需要通信的另一端建立通话。

整个过程中有请求连接,回复请求,创建连接实现真正数据传输。

系统设计

✧首先分解最终功能,实现聊天室的开发,基于客户服务器模式下实现端到端的传输机制,端到端的传输实现之后再上升到代理服务器。

✧Peer-Peer模式要求制作两个窗体作为界面,两个后台类作为实现,中间信息显示通过窗体赋值给对应的类,在类中实现接收、发送及信息的改变。

窗体主要实现信息显示,发送信息输入,单击发送时调用类实现基于栈的信息发送。

✧当两个用户之间实现收发传输基础上,开发代理服务器,要求客户首先登陆注册代理服务器,代理服务器接收用户响应,并且记录用户地址及状态信息等。

当发送信息时通过代理服务器获得对方地址。

实现三方信息传输。

✧基于代理服务器模式开发聊天室系统,客户登陆聊天室,代理服务器记录客户信息,开辟一个聊天场所供用户多人聊天。

实现私聊和群聊功能。

系统总体框图

图3.1客户服务器模式总体框图

图3.2代理服务器聊天室模式

用例模型

4.1客户服务器模式用例图

※用例名称:

启动服务器

⏹主要参与者:

服务器

⏹入口条件:

用户已经在服务器注册

⏹事件流程:

⏹1、系统启动等待已经注册客户重新注册

⏹2、验证客户注册信息

⏹3、返回注册成功信息给客户端

⏹4、监听客户连接申请,等待客户重新注册

⏹5、返回客户申请连接信息

登录注册

客户端用户

⏹事件流程:

⏹1、系统启动初始化

⏹2、向服务器发出注册申请

⏹3、等待代理服务器回复信息

⏹4、超时将重新发送注册信息

发送消息

用户已经在服务器注册成功并已经成功建立会话,等待数据传输

⏹1、系统将A客户发送信息按地址发送到B客户

⏹2、等待B客户的应答信息

⏹3、超时将重新发送信息

接收消息

⏹1、系统将处于收听状态,等待信息的接收

⏹2、接收到信息进行分解,分离信息

⏹3、将信息按格式呈现给客户再次等待信息

传输文件(未实现)

⏹1、A用户请求传输文件B用户。

⏹2、B用户在线并且接收该文件。

⏹3、B用户不在线A用户选择离线发送到服务器等待B用户上线接收。

修改个人登陆状态

服务器,客户端

⏹1、用户修改个人登陆信息

⏹2、用户修改完成提交修改信息给服务器

⏹3、服务器验证客户注册信息做进一步处理

⏹4、服务器验证信息是否完整,返回应答

4.1客户代理服务器模式用例图

启动系统

代理服务器

用户已经在代理服务器注册

登录聊天室

⏹2、向代理服务器发出注册申请

⏹3、等待代理代理服务器回复信息

私聊

⏹1、选择需要私聊用户

⏹2、发起一对一聊天模式

⏹3、系统发送信息给对应用户

⏹4、接收方收到信息发送相应消息

群聊

⏹1、向所有登陆聊天室用户发送聊天信息

⏹2、发起一对多聊天模式

⏹3、系统发送信息给所有聊天室用户

顺序图

类图

领域模型图

7.1聊天系统领域模型

四.实训项目结果及分析

✧基本实现基于javaSocket聊天系统

✧分析:

javaSocket聊天系统

只能进行简单的收发通信,不能多人聊天及一对多聊天,只能一对一聊天模式。

功能较简单。

✧基本实现基于JIAN-SIP聊天系统

JIAN-SIP聊天系统

只能进行简单的收发通信,能一对一聊天及一对多人聊天。

基本实现基于JIAN-SIP聊天室系统

JIAN-SIP聊天室系统

能实现简单的私聊和群聊及记录用户登录改变信息等。

五.实训项目人员、进度安排及完成过程

✧**主要负责:

基于JIAN-SIP聊天系统及聊天室系统

基于JAVASocket客户服务器模式聊天系统

基于JIAN-SIP客户服务器模式PTP聊天系统

✧**主要负责:

基于JIAN-SIP客户服务器模式界面美工、资料收集、文档编写、PPT制作等。

基于JIAN-SIP聊天室模式界面美工、资料收集、文档编写、PPT制作等。

六.实训项目心得及体会

心得体会:

通过聊天系统开发,理解Socket工作流程及实现方法,熟练掌握JAVASocket编程、JIAN-SIP编程。

实现了简单的基于JAVASocket编程简单聊天室功能分析设计及具体实施过程。

通过老师对SIP协议的讲解,对IMS也有了更深入了解,在系统实施过程中有更深的体会就是信令重要性,基于信令传输的格式及接受发送方法有了一个更清楚的了解。

在开发过程中遇到了很多问题,如HashTable表如何实现用户信息存储,NOTIFY信令为什么不能携带消息?

Dalog对话框问什么经常终止?

经过请教老师及同学的帮助一个一个的解决了,当然系统还有很多问题,但是在此过程中每个小组成员都有不同程度的提高,对JAVA编程也有了很好的训练。

七.附录

1、基于JAVASocket聊天室系统核心代码

publicvoidrun(){

//服务器端

try{

ServerSocketserverSocket=newServerSocket(portId);

serverSID=serverSocket.accept();

text.append("

服务器运行中"

+"

\n"

);

while(true){

InputStreamReaderrecervMessage=newInputStreamReader(serverSID.getInputStream());

BufferedReaderbuffer=newBufferedReader(recervMessage);

recervInput=buffer.readLine();

对方说"

+recervInput+"

}

}catch(IOExceptione){

//label.setText("

对方已经下线"

对方下线了。

"

}}

2、基于JIAN-SIP聊天系统核心代码

//该部分主要功能是将每次显示在控制台中的信息返回到窗体JTextAreatext中

privateintportId;

//自己定义的端口号

//传输接收信息

privatestaticJTextAreatext;

publicvoidGetMessage(JTextAreatext){

this.text=text;

服务器启动"

//结束自定义部分

publicvoidsendMessage(Stringmessage)throwsParseException,InvalidArgumentException,SipException{

Stringtransport="

udp"

;

StringpeerHostPort="

127.0.0.1:

5060"

StringfromName="

LittleGuy"

StringfromSipAddress="

StringfromDisplayName="

TheLittleBlister"

StringtoSipAddress="

StringtoUser="

BigGuy"

StringtoDisplayName="

TheMasterBlaster"

//create>

FromHeader

SipURIfromAddress=addressFactory.createSipURI(fromName,

fromSipAddress);

AddressfromNameAddress=addressFactory.createAddress(fromAddress);

fromNameAddress.setDisplayName(fromDisplayName);

FromHeaderfromHeader=headerFactory.createFromHeader(

fromNameAddress,"

12345"

//createToHeader

SipURItoAddress=addressFactory.createSipURI(toUser,toSipAddress);

AddresstoNameAddress=addressFactory.createAddress(toAddress);

toNameAddress.setDisplayName(toDisplayName);

ToHeadertoHeader=headerFactory.createToHeader(toNameAddress,

null);

SipURIrequestURI=addressFactory.createSipURI(toUser,

peerHostPort);

ArrayListviaHeaders=newArrayList();

StringipAddress=udpListeningPoint.getIPAddress();

ViaHeaderviaHeader=headerFactory.createViaHeader(ipAddress,

sipProvider.getListeningPoint(transport).getPort(),

transport,null);

viaHeaders.add(viaHeader);

ContentTypeHeadercontentTypeHeader=headerFactory

.createContentTypeHeader("

application"

"

sdp"

CallIdHeadercallIdHeader=sipProvider.getNewCallId();

CSeqHeadercSeqHeader=headerFactory.createCSeqHeader(1L,

Request.MESSAGE);

MaxForwardsHeadermaxForwards=headerFactory

.createMaxForwardsHeader(70);

Requestrequest=messageFactory.createRequest(requestURI,

Request.MESSAGE,callIdHeader,cSeqHeader,fromHeader,

toHeader,viaHeaders,maxForwards);

Stringhost="

127.0.0.1"

SipURIcontactUrl=addressFactory.createSipURI(fromName,host);

contactUrl.setPort(udpListeningPoint.getPort());

contactUrl.setLrParam();

SipURIcontactURI=addressFactory.createSipURI(fromName,host);

contactURI.setPort(sipProvider.getListeningPoint(transport)

.getPort());

AddresscontactAddress=addressFactory.createAddress(contactURI);

contactAddress.setDisplayName(fromName);

contactHeader=headerFactory.createContactHeader(contactAddress);

request.addHeader(contactHeader);

StringsdpData="

v=0\r\n"

+"

o=48551376079995695802013760799956958020"

INIP4129.6.55.78\r\n"

+"

s=mysessionsession\r\n"

p=+46852018010\r\n"

c=INIP4129.6.55.78\r\n"

t=00\r\n"

m=audio6022RTP/AVP0418\r\n"

a=rtpmap:

0PCMU/8000\r\n"

4G723/8000\r\n"

18G729A/8000\r\n"

a=ptime:

20\r\n"

byte[]contents=sdpData.getBytes();

request.setContent(contents,contentTypeHeader);

HeadercallInfoHeader=headerFactory.createHeader("

Call-Info"

<

http:

//www.antd1.nist.gov>

request.addHeader(callInfoHeader);

sipProvider.sendRequest(request);

//sendtherequestout.

inviteTid.sendRequest();

dialog=inviteTid.getDialog();

}catch(Exceptionex){

System.out.println(ex.getMessage());

ex.printStackTrace();

usage();

if(method.equals("

INFO"

))

{

FromHeaderfromInfo=(FromHeader)req.getHeader("

From"

Stringusername=fromInfo.toString().substring(7,12);

Stringuserstate=newString(req.getRawContent());

userloginnumber++;

+username+"

:

进入聊天室,聊天室人数:

+userloginnumber+"

人"

Stringuserid=username.substring(4,5);

Stringipaddress=fromRegist.toString().substring(15,39);

listModel.set(Integer.parseInt(userid),username+"

上线"

list.updateUI();

Responseresponse=null;

try{//ReplywithOK

response=messageFactory.createResponse(200,req);

ToHeadertoHeader=(ToHeader)response.getHeader(ToHeader.NAME);

toHeader.setTag("

888"

//Thisismandatoryasperthespec.

ServerTransactionst=sipProvider.getNewServerTransaction(req);

st.sendResponse(response);

}catch(Throwablee){

e.printStackTrace();

messageProcessor.processError("

Can'

tsendOKreply."

//将注册信息发给好友用户

for(inti=0;

i<

userNumber;

i++)

{intj=Integer.parseInt(useridinit[i]);

\n打印表中内容"

+userRegisterinit[j][0]+"

+userRegisterinit[j][1]);

//if(!

(aa[i][0].equals(username)))

//SendInfo(userRegisterinit[j][1],username+"

+ipaddress);

SendInfo(ipaddress,userRegisterinit[j][0]+

//SendInfo(aa[userNumber-1][1],aa[i][0]+"

}catch(ParseExceptione){

//TODOAuto-generatedcatchblock

}catch(InvalidArgumentExceptione){

}catch(SipExceptione){

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2