送给sip学习者sip实例_第1页
送给sip学习者sip实例_第2页
送给sip学习者sip实例_第3页
送给sip学习者sip实例_第4页
送给sip学习者sip实例_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、网站上关于基于sip的java编程实例实在是太少了,这个严重影响了sip的传播和发展,所以我上传了这个小实验,让大家参考下。在做实验前,我们需要一些东西:我的环境:XPEclipse需要包:这个需要在网上自己找,或者hi我,我也可以给你们哈。-百度账号:时光可见好了,现在看程序了哈,主要是三个文件。MessageProcessor.java :public interface MessageProcessor public void processMessage(String sender, String message); public void processError(String er

2、rorMessage); public void processInfo(String infoMessage);SipLayer.java :import java.text.ParseException;import java.util.*;import javax.sip.*;import javax.sip.address.*;import javax.sip.header.*;import javax.sip.message.*;public class SipLayer implements SipListener private MessageProcessor messageP

3、rocessor;private String username;private SipStack sipStack;private SipFactory sipFactory;private AddressFactory addressFactory;private HeaderFactory headerFactory;private MessageFactory messageFactory;private SipProvider sipProvider;/* Here we initialize the SIP stack. */public SipLayer(String usern

4、ame, String ip, int port)throws PeerUnavailableException, TransportNotSupportedException,InvalidArgumentException, ObjectInUseException,TooManyListenersException setUsername(username);sipFactory = SipFactory.getInstance();sipFactory.setPathName("gov.nist");Properties properties = new Prope

5、rties();properties.setProperty("javax.sip.STACK_NAME", "TextClient");properties.setProperty("javax.sip.IP_ADDRESS", ip);/ DEBUGGING: Information will go to files/ textclient.log and textclientdebug.logproperties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", &q

6、uot;32");properties.setProperty("gov.nist.javax.sip.SERVER_LOG", "textclient.txt");properties.setProperty("gov.nist.javax.sip.DEBUG_LOG", "textclientdebug.log");sipStack = sipFactory.createSipStack(properties);headerFactory = sipFactory.createHeaderFactor

7、y();addressFactory = sipFactory.createAddressFactory();messageFactory = sipFactory.createMessageFactory();/ListeningPoint tcp = sipStack.createListeningPoint(port, "tcp");ListeningPoint udp = sipStack.createListeningPoint(port, "udp");/ sipProvider = sipStack.createSipProvider(tc

8、p);/ sipProvider.addSipListener(this);/ suppose UDP is used as transport, Bob Cheng, 03-11-10sipProvider = sipStack.createSipProvider(udp);sipProvider.addSipListener(this);/* * This method uses the SIP stack to send a message. */public void sendMessage(String to, String message) throws ParseExceptio

9、n,InvalidArgumentException, SipException SipURI from = addressFactory.createSipURI(getUsername(), getHost() + ":" + getPort();Address fromNameAddress = addressFactory.createAddress(from);fromNameAddress.setDisplayName(getUsername();FromHeader fromHeader = headerFactory.createFromHeader(fro

10、mNameAddress, "textclientv1.0");String username = to.substring(to.indexOf(":") + 1, to.indexOf("");String address = to.substring(to.indexOf("") + 1);SipURI toAddress = addressFactory.createSipURI(username, address);Address toNameAddress = addressFactory.create

11、Address(toAddress);toNameAddress.setDisplayName(username);ToHeader toHeader = headerFactory.createToHeader(toNameAddress, null);SipURI requestURI = addressFactory.createSipURI(username, address);requestURI.setTransportParam("udp");ArrayList<ViaHeader> viaHeaders = new ArrayList<Vi

12、aHeader>();ViaHeader viaHeader = headerFactory.createViaHeader(getHost(), getPort(), "udp", "branch1");viaHeaders.add(viaHeader);CallIdHeader callIdHeader = sipProvider.getNewCallId();CSeqHeader cSeqHeader = headerFactory.createCSeqHeader(1, Request.MESSAGE);MaxForwardsHeader

13、maxForwards = headerFactory.createMaxForwardsHeader(70);Request request = messageFactory.createRequest(requestURI,Request.MESSAGE, callIdHeader, cSeqHeader, fromHeader,toHeader, viaHeaders, maxForwards);SipURI contactURI = addressFactory.createSipURI(getUsername(), getHost();contactURI.setPort(getPo

14、rt();Address contactAddress = addressFactory.createAddress(contactURI);contactAddress.setDisplayName(getUsername();ContactHeader contactHeader = headerFactory.createContactHeader(contactAddress);request.addHeader(contactHeader);ContentTypeHeader contentTypeHeader = headerFactory.createContentTypeHea

15、der("text", "plain");request.setContent(message, contentTypeHeader);sipProvider.sendRequest(request);/* This method is called by the SIP stack when a response arrives. */public void processResponse(ResponseEvent evt) Response response = evt.getResponse();int status = response.get

16、StatusCode();if (status >= 200) && (status < 300) / Success!messagePcessInfo("-Sent");return;messagePcessError("Previous message not sent: " + status);/* * This method is called by the SIP stack when a new request arrives. */public void proce

17、ssRequest(RequestEvent evt) Request req = evt.getRequest();String method = req.getMethod();if (!method.equals("MESSAGE") / bad request type.messagePcessError("Bad request type: " + method);return;FromHeader from = (FromHeader) req.getHeader("From");messagePr

18、cessMessage(from.getAddress().toString(),new String(req.getRawContent();Response response = null;try / Reply with OKresponse = messageFactory.createResponse(200, req);ToHeader toHeader = (ToHeader) response.getHeader(ToHeader.NAME);toHeader.setTag("888"); / This is mandatory as

19、per the spec.ServerTransaction st = sipProvider.getNewServerTransaction(req);st.sendResponse(response); catch (Throwable e) e.printStackTrace();messagePcessError("Can't send OK reply.");/* * This method is called by the SIP stack when there's no answer to a * message. N

20、ote that this is treated differently from an error message. */public void processTimeout(TimeoutEvent evt) messagePcessError("Previous message not sent: " + "timeout");/* * This method is called by the SIP stack when there's an asynchronous * message transmission

21、error. */public void processIOException(IOExceptionEvent evt) messagePcessError("Previous message not sent: " + "I/O Exception");/* * This method is called by the SIP stack when a dialog (session) ends. */public void processDialogTerminated(DialogTerminatedEvent evt)

22、/* * This method is called by the SIP stack when a transaction ends. */public void processTransactionTerminated(TransactionTerminatedEvent evt) public String getHost() int port = sipProvider.getListeningPoint().getPort();String host = sipStack.getIPAddress();return host;public int getPort() int port

23、 = sipProvider.getListeningPoint().getPort();return port;public String getUsername() return username;public void setUsername(String newUsername) username = newUsername;public MessageProcessor getMessageProcessor() return messageProcessor;public void setMessageProcessor(MessageProcessor newMessagePro

24、cessor) messageProcessor = newMessageProcessor;TextClient.java :import java.awt.event.*;import javax.swing.*;import .InetAddress;public class TextClient extends JFrame implements MessageProcessor private SipLayer sipLayer;private JTextField fromAddress;private JLabel fromLbl;private JLabel receivedL

25、bl;private JTextArea receivedMessages;private JScrollPane receivedScrollPane;private JButton sendBtn;private JLabel sendLbl;private JTextField sendMessages;private JTextField toAddress;private JLabel toLbl;public static void main(String args) if (args.length != 2) printUsage();System.exit(-1);try St

26、ring username = args0;int port = Integer.parseInt(args1);String ip = InetAddress.getLocalHost().getHostAddress();System.out.println("-username = "+username+"n-port = "+port+"n-ip = "+ip);SipLayer sipLayer = new SipLayer(username, ip, port);TextClient tc = new TextClient

27、(sipLayer);sipLayer.setMessageProcessor(tc);/ tc.show();tc.setVisible(true); catch (Throwable e) System.out.println("Problem initializing the SIP stack.");e.printStackTrace();System.exit(-1);private static void printUsage() System.out.println("Syntax:");System.out.println("

28、java -jar textclient.jar <username> <port>");System.out.println("where <username> is the nickname of this user");System.out.println("and <port> is the port number to use. Usually 5060 if not used by another process.");System.out.println("Example:

29、");System.out.println(" java -jar textclient.jar snoopy71 5061");public TextClient(SipLayer sip) super();sipLayer = sip;initWindow();String from = "sip:" + sip.getUsername() + "" + sip.getHost() + ":" + sip.getPort();this.fromAddress.setText(from);private

30、 void initWindow() receivedLbl = new JLabel();sendLbl = new JLabel();sendMessages = new JTextField();receivedScrollPane = new JScrollPane();receivedMessages = new JTextArea();fromLbl = new JLabel();fromAddress = new JTextField();toLbl = new JLabel();toAddress = new JTextField();sendBtn = new JButton

31、();getContentPane().setLayout(null);setTitle("TextClient");addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent evt) System.exit(0););receivedLbl.setText("Received Messages:");receivedLbl.setAlignmentY(0.0F);receivedLbl.setPreferredSize(new java.awt.Dimensi

32、on(25, 100);getContentPane().add(receivedLbl);receivedLbl.setBounds(5, 0, 136, 20);sendLbl.setText("Send Message:");getContentPane().add(sendLbl);sendLbl.setBounds(5, 150, 90, 20);getContentPane().add(sendMessages);sendMessages.setBounds(5, 170, 270, 20);receivedMessages.setAlignmentX(0.0F

33、);receivedMessages.setEditable(false);/设置为不可编辑receivedMessages.setLineWrap(true);/设置可换行receivedMessages.setWrapStyleWord(true);/设置换行方式为单词边界换行receivedScrollPane.setViewportView(receivedMessages);receivedScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);getContentPane().a

34、dd(receivedScrollPane);receivedScrollPane.setBounds(5, 20, 270, 130);fromLbl.setText("From:");getContentPane().add(fromLbl);fromLbl.setBounds(5, 200, 35, 15);getContentPane().add(fromAddress);fromAddress.setBounds(40, 200, 235, 20);fromAddress.setEditable(false);toLbl.setText("To:&quo

35、t;);getContentPane().add(toLbl);toLbl.setBounds(5, 225, 35, 15);getContentPane().add(toAddress);toAddress.setBounds(40, 225, 235, 21);sendBtn.setText("Send");sendBtn.addActionListener(new ActionListener() public void actionPerformed(ActionEvent evt) sendBtnActionPerformed(evt););getContent

36、Pane().add(sendBtn);sendBtn.setBounds(200, 255, 75, 25);java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();setBounds(screenSize.width - 288) / 2, (screenSize.height - 310) / 2,288, 320);private void sendBtnActionPerformed(ActionEvent evt) try String to = this.toAddr

37、ess.getText();String message = this.sendMessages.getText();sipLayer.sendMessage(to, message); catch (Throwable e) e.printStackTrace();this.receivedMessages.append("ERROR sending message: "+ e.getMessage() + "n");public void processMessage(String sender, String message) this.recei

38、vedMessages.append("From " + sender + ": " + message + "n");public void processError(String errorMessage) this.receivedMessages.append("ERROR: " + errorMessage + "n");public void processInfo(String infoMessage) this.receivedMessages.append(infoMessage + "n");上面是一个简单的发送接收程序哈。运行截图:注意这里的ip和port是由电脑上获取的,要是你的程序不能运行,那可能是你的电脑没有连接、或者是连接断开。可以自行在程序中设置ip和port。对这个程序的说明:注意:这是一个本机发送本机接收的例子。对于整个程序的分析:* 定义一个SipLayer变量sipLayer,传入参数(userna

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论