1、送给sip学习者sip实例网站上关于基于sip的java编程实例实在是太少了,这个严重影响了sip的传播和发展,所以我上传了这个小实验,让大家参考下。在做实验前,我们需要一些东西:我的环境:XPEclipse需要包:这个需要在网上自己找,或者hi我,我也可以给你们哈。-XX账号:时光可见好了,现在看程序了哈,主要是三个文件。MessageProcessor.java :public interface MessageProcessor public void processMessage(String sender, String message); public void processEr
2、ror(String errorMessage); 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 MessageProce
3、ssor messageProcessor; 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
4、 SipLayer(String username, String ip, int port) throws PeerUnavailableException, TransportNotSupportedException, InvalidArgumentException, ObjectInUseException, TooManyListenersException setUsername(username); sipFactory = SipFactory.getInstance(); sipFactory.setPathName(gov.nist); Properties proper
5、ties = new Properties(); properties.setProperty(javax.sip.STACK_NAME, TextClient); properties.setProperty(javax.sip.IP_ADDRESS, ip); / DEBUGGING: Information will go to files / textclient.log and textclientdebug.log properties.setProperty(gov.nist.javax.sip.TRACE_LEVEL, 32); properties.setProperty(g
6、ov.nist.javax.sip.SERVER_LOG, textclient.txt); properties.setProperty(gov.nist.javax.sip.DEBUG_LOG, textclientdebug.log); sipStack = sipFactory.createSipStack(properties); headerFactory = sipFactory.createHeaderFactory(); addressFactory = sipFactory.createAddressFactory(); messageFactory = sipFactor
7、y.createMessageFactory();/ ListeningPoint tcp = sipStack.createListeningPoint(port, tcp); ListeningPoint udp = sipStack.createListeningPoint(port, udp); / sipProvider = sipStack.createSipProvider(tcp); / sipProvider.addSipListener(this); / suppose UDP is used as transport, Bob Cheng, 03-11-10 sipPro
8、vider = sipStack.createSipProvider(udp); sipProvider.addSipListener(this); /* * This method uses the SIP stack to send a message. */ public void sendMessage(String to, String message) throws ParseException, InvalidArgumentException, SipException SipURI from = addressFactory.createSipURI(getUsername(
9、), getHost() + : + getPort(); Address fromNameAddress = addressFactory.createAddress(from); fromNameAddress.setDisplayName(getUsername(); FromHeader fromHeader = headerFactory.createFromHeader(fromNameAddress, textclientv1.0); String username = to.substring(to.indexOf(:) + 1, to.indexOf(); String ad
10、dress = to.substring(to.indexOf() + 1); SipURI toAddress = addressFactory.createSipURI(username, address); Address toNameAddress = addressFactory.createAddress(toAddress); toNameAddress.setDisplayName(username); ToHeader toHeader = headerFactory.createToHeader(toNameAddress, null); SipURI requestURI
11、 = addressFactory.createSipURI(username, address); requestURI.setTransportParam(udp); ArrayList viaHeaders = new ArrayList(); ViaHeader viaHeader = headerFactory.createViaHeader(getHost(), getPort(), udp, branch1); viaHeaders.add(viaHeader); CallIdHeader callIdHeader = sipProvider.getNewCallId(); CS
12、eqHeader cSeqHeader = headerFactory.createCSeqHeader(1, Request.MESSAGE); MaxForwardsHeader maxForwards = headerFactory.createMaxForwardsHeader(70); Request request = messageFactory.createRequest(requestURI, Request.MESSAGE, callIdHeader, cSeqHeader, fromHeader, toHeader, viaHeaders, maxForwards); S
13、ipURI contactURI = addressFactory.createSipURI(getUsername(), getHost(); contactURI.setPort(getPort(); Address contactAddress = addressFactory.createAddress(contactURI); contactAddress.setDisplayName(getUsername(); ContactHeader contactHeader = headerFactory.createContactHeader(contactAddress); requ
14、est.addHeader(contactHeader); ContentTypeHeader contentTypeHeader = headerFactory.createContentTypeHeader(text, plain); request.setContent(message, contentTypeHeader); sipProvider.sendRequest(request); /* This method is called by the SIP stack when a response arrives. */ public void processResponse(
15、ResponseEvent evt) Response response = evt.getResponse(); int status = response.getStatusCode(); if (status = 200) & (status 300) / Success! messageProcessor.processInfo(-Sent); return; messageProcessor.processError(Previous message not sent: + status); /* * This method is called by the SIP stack wh
16、en a new request arrives. */ public void processRequest(RequestEvent evt) Request req = evt.getRequest(); String method = req.getMethod(); if (!method.equals(MESSAGE) / bad request type. messageProcessor.processError(Bad request type: + method); return; FromHeader from = (FromHeader) req.getHeader(F
17、rom); messageProcessor.processMessage(from.getAddress().toString(), new String(req.getRawContent(); Response response = null; try / Reply with OK response = messageFactory.createResponse(200, req); ToHeader toHeader = (ToHeader) response.getHeader(ToHeader.NAME); toHeader.setTag(888); / This is mand
18、atory as per the spec. ServerTransaction st = sipProvider.getNewServerTransaction(req); st.sendResponse(response); catch (Throwable e) e.printStackTrace(); messageProcessor.processError(Cant send OK reply.); /* * This method is called by the SIP stack when theres no answer to a * message. Note that
19、this is treated differently from an error message. */ public void processTimeout(TimeoutEvent evt) messageProcessor .processError(Previous message not sent: + timeout); /* * This method is called by the SIP stack when theres an asynchronous * message transmission error. */ public void processIOExcep
20、tion(IOExceptionEvent evt) messageProcessor.processError(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) /* * This method is called by the SIP stack when a transac
21、tion 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 = sipProvider.getListeningPoint().getPort(); return p
22、ort; public String getUsername() return username; public void setUsername(String newUsername) username = newUsername; public MessageProcessor getMessageProcessor() return messageProcessor; public void setMessageProcessor(MessageProcessor newMessageProcessor) messageProcessor = newMessageProcessor; T
23、extClient.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 receivedLbl; private JTextArea receivedMessages; priva
24、te 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 String username = args0; int port = I
25、nteger.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(sipLayer); sipLayer.setMessageProcessor(tc); / tc.show(); tc.se
26、tVisible(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( java -jar textclient.jar ); System.out.println(where is the nickname of this user); Sys
27、tem.out.println(and is the port number to use. Usually 5060 if not used by another process.); System.out.println(Example:); System.out.println( java -jar textclient.jar snoopy71 5061); public TextClient(SipLayer sip) super(); sipLayer = sip; initWindow(); String from = sip: + sip.getUsername() + + s
28、ip.getHost() + : + sip.getPort(); this.fromAddress.setText(from); private void initWindow() receivedLbl = new JLabel(); sendLbl = new JLabel(); sendMessages = new JTextField(); receivedScrollPane = new JScrollPane(); receivedMessages = new JTextArea(); fromLbl = new JLabel(); fromAddress = new JText
29、Field(); toLbl = new JLabel(); toAddress = new JTextField(); sendBtn = new JButton(); 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.Dimension(25, 100); getContentPane().add(receivedLbl); receivedLbl.setBounds(5, 0, 136, 20); sendLbl.setText(Send Message:); getContentPane().add(sendLbl); sendLb
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1