送给sip学习者sip实例.docx
- 文档编号:29899885
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:14
- 大小:37.60KB
送给sip学习者sip实例.docx
《送给sip学习者sip实例.docx》由会员分享,可在线阅读,更多相关《送给sip学习者sip实例.docx(14页珍藏版)》请在冰豆网上搜索。
送给sip学习者sip实例
网站上关于基于sip的java编程实例实在是太少了,这个严重影响了sip的传播和发展,所以我上传了这个小实验,让大家参考下。
在做实验前,我们需要一些东西:
我的环境:
XP
Eclipse
需要包:
这个需要在网上自己找,或者hi我,我也可以给你们哈。
----XX账号:
时光可见
好了,现在看程序了哈,主要是三个文件。
:
publicinterfaceMessageProcessor
{
publicvoidprocessMessage(Stringsender,Stringmessage);
publicvoidprocessError(StringerrorMessage);
publicvoidprocessInfo(StringinfoMessage);
}
:
import.*;
import.*;
importclassSipLayerimplementsSipListener{
privateMessageProcessormessageProcessor;
privateStringusername;
privateSipStacksipStack;
privateSipFactorysipFactory;
privateAddressFactoryaddressFactory;
privateHeaderFactoryheaderFactory;
privateMessageFactorymessageFactory;
privateSipProvidersipProvider;
/**HereweinitializetheSIPstack.*/
publicSipLayer(Stringusername,Stringip,intport)
throwsPeerUnavailableException,TransportNotSupportedException,
InvalidArgumentException,ObjectInUseException,
TooManyListenersException{
setUsername(username);
sipFactory=();
("");
Propertiesproperties=newProperties();
("","TextClient");
("",ip);
*/
publicvoidsendMessage(Stringto,Stringmessage)throwsParseException,
InvalidArgumentException,SipException{
SipURIfrom=(getUsername(),getHost()+":
"+getPort());
AddressfromNameAddress=(from);
(getUsername());
FromHeaderfromHeader=(fromNameAddress,"");
Stringusername=(":
")+1,("@"));
Stringaddress=("@")+1);
SipURItoAddress=(username,address);
AddresstoNameAddress=(toAddress);
(username);
ToHeadertoHeader=(toNameAddress,null);
SipURIrequestURI=(username,address);
("udp");
ArrayList
ViaHeaderviaHeader=(getHost(),getPort(),"udp","branch1");
(viaHeader);
CallIdHeadercallIdHeader=();
CSeqHeadercSeqHeader=(1,;
MaxForwardsHeadermaxForwards=(70);
Requestrequest=(requestURI,
callIdHeader,cSeqHeader,fromHeader,
toHeader,viaHeaders,maxForwards);
SipURIcontactURI=(getUsername(),getHost());
(getPort());
AddresscontactAddress=(contactURI);
(getUsername());
ContactHeadercontactHeader=(contactAddress);
(contactHeader);
ContentTypeHeadercontentTypeHeader=("text","plain");
(message,contentTypeHeader);
(request);
}
/**ThismethodiscalledbytheSIPstackwhenaresponsearrives.*/
publicvoidprocessResponse(ResponseEventevt){
Responseresponse=();
intstatus=();
if((status>=200)&&(status<300)){*/
publicvoidprocessRequest(RequestEventevt){
Requestreq=();
Stringmethod=();
if(!
("MESSAGE")){("Badrequesttype:
"+method);
return;
}
FromHeaderfrom=(FromHeader)("From");
().toString(),
newString()));
Responseresponse=null;
try{ServerTransactionst=(req);
(response);
}catch(Throwablee){
();
("Can'tsendOKreply.");
}
}
/**
*ThismethodiscalledbytheSIPstackwhenthere'snoanswertoa
*message.Notethatthisistreateddifferentlyfromanerrormessage.
*/
publicvoidprocessTimeout(TimeoutEventevt){
messageProcessor
.processError("Previousmessagenotsent:
"+"timeout");
}
/**
*ThismethodiscalledbytheSIPstackwhenthere'sanasynchronous
*messagetransmissionerror.
*/
publicvoidprocessIOException(IOExceptionEventevt){
("Previousmessagenotsent:
"+"I/OException");
}
/**
*ThismethodiscalledbytheSIPstackwhenadialog(session)ends.
*/
publicvoidprocessDialogTerminated(DialogTerminatedEventevt){
}
/**
*ThismethodiscalledbytheSIPstackwhenatransactionends.
*/
publicvoidprocessTransactionTerminated(TransactionTerminatedEventevt){
}
publicStringgetHost(){
intport=().getPort();
Stringhost=();
returnhost;
}
publicintgetPort(){
intport=().getPort();
returnport;
}
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(StringnewUsername){
username=newUsername;
}
publicMessageProcessorgetMessageProcessor(){
returnmessageProcessor;
}
publicvoidsetMessageProcessor(MessageProcessornewMessageProcessor){
messageProcessor=newMessageProcessor;
}
}
:
import.*;
importclassTextClientextendsJFrameimplementsMessageProcessor{
privateSipLayersipLayer;
privateJTextFieldfromAddress;
privateJLabelfromLbl;
privateJLabelreceivedLbl;
privateJTextAreareceivedMessages;
privateJScrollPanereceivedScrollPane;
privateJButtonsendBtn;
privateJLabelsendLbl;
privateJTextFieldsendMessages;
privateJTextFieldtoAddress;
privateJLabeltoLbl;
publicstaticvoidmain(String[]args){
if!
=2){
printUsage();
(-1);
}
try{
Stringusername=args[0];
intport=(args[1]);
Stringip=().getHostAddress();
"--username="+username
+"\n--port="+port
+"\n--ip="+ip);
SipLayersipLayer=newSipLayer(username,ip,port);
TextClienttc=newTextClient(sipLayer);
(tc);
;
();
(-1);
}
}
privatestaticvoidprintUsage(){
"Syntax:
");
"java-jar
"where
"and
"Example:
");
"java-jarsnoopy715061");
}
publicTextClient(SipLayersip){
super();
sipLayer=sip;
initWindow();
Stringfrom="sip:
"+()+"@"+()+":
"+();
}
privatevoidinitWindow(){
receivedLbl=newJLabel();
sendLbl=newJLabel();
sendMessages=newJTextField();
receivedScrollPane=newJScrollPane();
receivedMessages=newJTextArea();
fromLbl=newJLabel();
fromAddress=newJTextField();
toLbl=newJLabel();
toAddress=newJTextField();
sendBtn=newJButton();
getContentPane().setLayout(null);
setTitle("TextClient");
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEventevt){
(0);
}
});
("ReceivedMessages:
");
;
(new100));
getContentPane().add(receivedLbl);
(5,0,136,20);
("SendMessage:
");
getContentPane().add(sendLbl);
(5,150,90,20);
getContentPane().add(sendMessages);
(5,170,270,20);
;
(false);etHorizontalScrollBarPolicy;
getContentPane().add(receivedScrollPane);
(5,20,270,130);
("From:
");
getContentPane().add(fromLbl);
(5,200,35,15);
getContentPane().add(fromAddress);
(40,200,235,20);
(false);
("To:
");
getContentPane().add(toLbl);
(5,225,35,15);
getContentPane().add(toAddress);
(40,225,235,21);
("Send");
(newActionListener(){
publicvoidactionPerformed(ActionEventevt){
sendBtnActionPerformed(evt);
}
});
getContentPane().add(sendBtn);
(200,255,75,25);
screenSize=.getScreenSize();
setBounds(-288)/2,-310)/2,
288,320);
}
privatevoidsendBtnActionPerformed(ActionEventevt){
try{
Stringto=Stringmessage=(to,message);
}catch(Throwablee){
();
"ERRORsendingmessage:
"
+()+"\n");
}
}
publicvoidprocessMessage(Stringsender,Stringmessage){
"From"+sender+":
"+message+"\n");
}
publicvoidprocessError(StringerrorMessage){
"ERROR:
"+errorMessage+"\n");
}
publicvoidprocessInfo(StringinfoMessage){
+"\n");
}
}
上面是一个简单的发送接收程序哈。
运行截图:
注意这里的ip和port是由电脑上获取的,要是你的程序不能运行,那可能是你的电脑没有连接、或者是连接断开。
可以自行在程序中设置ip和port。
对这个程序的说明:
注意:
这是一个本机发送本机接收的例子。
对于整个程序的分析:
*在运行程序的时候,将自动获取发送方的username--bob、port--8000、*定义一个SipLayer变量sipLayer,传入参数(username、portip),
再将其传递给TextClient类的构造函数---这样在TextClient类中就可以调用SipLayer中的函数
*定义一个TextClient类TC,并将其传入(TC)--这一步很重要
*因为TextClient类实现了MessageProcessor接口,当SipLayer类中调用MessageProcessor中的函数时,
参数自动传递到TextClient类中实现的MessageProcessor接口的函数
*进行窗口的初始化
*点击发送按钮的时候,将消失发送到SipLayer中进行处理:
(to,message);
*对数据进行包装和处理---这一步就不细说了
*最后由sip供应商发送数据(request);
*因为之前说过了,这是一个本机发送本机接收的例子
*数据在SipLayer类中的processRequest(RequestEventevt)函数接收到,并进行处理
运行结果:
*在输入为:
8000时,程序运行正常
*在输入为:
8000时,程序运行正常
*在改变ip前三位的任意数时,例:
8000
报错ERRORsendingmessage:
IOExceptionoccuredwhileSendingRequest
*在改变ip的最后一位时,不能接收数据,无报错
*在改变端口号时,例:
8001,不能接收数据,无报错
*在发送数据为空时,不能接收数据,无报错
*在去掉第一个":
"时,例:
8000
报错ERRORsendingmessage:
Stringindexoutofrange:
-14
*在去掉"@"时,例:
sip:
报错ERRORsendingmessage:
Stringindexoutofrange:
-5
*在第一个":
"后面加上空格,例:
sip:
8000
报错ERRORsendingmessage:
sip:
8000:
Missinghostname
*在sip后面加上空格,程序正常运行
*在用户名后面加上空格,例:
sip:
jo@报错ERRORsendingmessage:
IOExceptionoccuredwhileSendingRequest
*在@后面加上空格,例:
sip:
jo@报错ERRORsendingmessage:
sip:
jo@Missinghostname
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 送给 sip 学习者 实例