Pjsip通信如何使用TCP协议

来源:互联网 发布:复杂网络基础概论 编辑:程序博客网 时间:2024/05/29 09:27

Pjsip协议支持TCP、UDP等协议,默认情况下,PJSIP使用的是UDP协议,但是这会导致数据过长的时候会出现数据丢失的现象,很大的限制了Pjsip的通信。为此,我们要配置TCP通信。通信的时候要涉及两个阶段:登陆——发送消息;

1.登陆

public static void pjsipLogin(String sipName, String sipPassword, String sipDomain) {    AccountConfig accCfg = new AccountConfig();    String acc_id = "sip:" + sipName + "@" + sipDomain + ";transport=tcp";    String registrar = "sip:" + sipDomain + ";transport=tcp" ;    String proxy = "";    String username = sipName;    String password = sipPassword;    accCfg.setIdUri(acc_id);    accCfg.getRegConfig().setRegistrarUri(registrar);    AuthCredInfoVector creds = accCfg.getSipConfig().getAuthCreds();    creds.clear();    if (username.length() != 0) {        creds.add(new AuthCredInfo("digest", "*", username, 0, password));    }    StringVector proxies = accCfg.getSipConfig().getProxies();    proxies.clear();    if (proxy.length() != 0) {        proxies.add(proxy);    }    accCfg.getNatConfig().setIceEnabled(true);    try {        account.modify(accCfg);    } catch (Exception e) {        e.printStackTrace();    }}

如代码所示,

String acc_id = "sip:" + sipName + "@" + sipDomain + ";transport=tcp";String registrar = "sip:" + sipDomain + ";transport=tcp" ;
两行代码末尾都要加上";transport = tcp",这样的话才能保证我们的注册的时候选择TCP通信;


好了,登陆只是第一步,接下来是发送消息:

2.消息发送

public void pjsipSendMsg(final String content,  String userId) {    String buddy_uri = "<sip:" + userId + "@" + Constants.sipDomain + ";transport=tcp" + ">";
    LogUtil.println(TAG + "pjsipSendMsg"," buddy_uri = " + buddy_uri);    BuddyConfig bCfg = new BuddyConfig();    bCfg.setUri(buddy_uri);    bCfg.setSubscribe(false);    MyBuddy myBuddy = account.addBuddy(bCfg);
    SendInstantMessageParam prm = new SendInstantMessageParam();    prm.setContent(content);    try {        //    myBuddy.create(account, bCfg);        myBuddy.sendInstantMessage(prm);        myBuddy.delete();    } catch (Exception e) {        e.printStackTrace();        return;    }}

发送消息的时候,要先配置目标sip地址:+

String buddy_uri = "<sip:" + userId + "@" + Constants.sipDomain + ";transport=tcp" + ">";
在这行代码尾端也要添加";transport = tcp",这和我们登陆的时候sip账号尾端添加的是一致的哦,这样的话才能通过tcp协议将我们的消息发给目标用户哦!


1 0