PJSIP-PJLIB-Socket
As we all know,most our projects are need to use the socket to programme.Use socket we can connect our device to others and our client to the Internet,so it's made our product more powerful.Now,let's begin the key part-pjlib socket.
The date types and functions are too much,if you need some of them,just click the links.
http://www.pjsip.org/docs/latest/pjlib/docs/html/page_pjlib_sock_test.htm
test1:get hostname and host address
- //PJLIP I/O
- //Socket test->get hostname and hostaddress
- //heat nan
- #include<pjlib.h>
- int main()
- {
- pj_status_t status;
- pj_in_addr hostaddr; //This structure describes Internet address.
- // dada fields pj_uint32_t s_addr. The 32bit IP address.
- unsigned char *hostaddr_str;
- const pj_str_t *hostname;
- //pj_init
- status=pj_init();
- if(status!=PJ_SUCCESS)
- {
- PJ_LOG(,(" ","init failed!"));
- }
- //gethostname
- hostname=pj_gethostname();
- if(!hostname||!hostname->ptr||!hostname->slen)
- {
- PJ_LOG(,( "gethostname","faild"));
- }
- else
- {
- PJ_LOG(,("gethostname","the hostname is %s",hostname->ptr));
- }
- hostaddr=pj_gethostaddr();
- if(hostaddr.s_addr)
- {
- hostaddr_str=pj_inet_ntoa(hostaddr);//function pj_in_addr -> char *
- //Convert an Internet host address given in network byte order to string in standard numbers and dots notation.
- PJ_LOG(,("gethostaddress","%s",hostaddr_str));
- }
- else
- {
- PJ_LOG(,("gethostaddress","failed"));
- }
- pj_shutdown();
- getchar();//show the result before you enter any key
- }
get hostname
test2:sendto and recv message use udp;
- // PJLIB I/O UDP test
- //heat nan
- //server
- #include<pjlib.h>
- #define UDP_PORT 6000
- #define ADDRESS "127.0.0.1"
- #define N 100
- int main( )
- {
- pj_status_t status;
- pj_sockaddr_in addr;
- int length=sizeof(addr);
- pj_sock_t cs;
- pj_sock_t ss;
- pj_sockaddr_in daddr;
- pj_sockaddr_in saddr;
- pj_str_t s;
- pj_str_t* IP_Addr;
- char recvbuff[N+];
- char sendbuff[N+];
- pj_ssize_t len1;
- status=pj_init();
- if(status!=PJ_SUCCESS)
- {
- PJ_LOG(,("pj_init","failed"));
- }
- //now we creat a socket ss
- status=pj_sock_socket(pj_AF_INET(),pj_SOCK_DGRAM(),,&ss);
- if(status!=)
- {
- PJ_LOG(,("creat ss socket","failed"));
- }
- //now we creat a socket cs
- status=pj_sock_socket(pj_AF_INET(),pj_SOCK_DGRAM(),,&cs);
- if(status!=)
- {
- PJ_LOG(,("creat cs socket","failed"));
- }
- pj_bzero(&daddr,sizeof(daddr));
- daddr.sin_family=pj_AF_INET();
- daddr.sin_port=pj_htons(UDP_PORT);
- IP_Addr=pj_cstr(&s,ADDRESS);
- daddr.sin_addr=pj_inet_addr(IP_Addr);
- status=pj_sock_bind(ss,&daddr,sizeof(daddr));
- if(status!=)
- {
- PJ_LOG(,("pj_sock_bind ","bind ss failed"));
- }
- /*
- pj_bzero(&saddr,sizeof(saddr));
- saddr.sin_family=pj_AF_INET();
- saddr.sin_port=pj_htons(UDP_PORT-1);
- IP_Addr=pj_cstr(&s,ADDRESS);
- saddr.sin_addr=pj_inet_addr(IP_Addr);
- status=pj_sock_bind(cs,&saddr,sizeof(saddr));
- if(status!=0)
- {
- PJ_LOG(3,("pj_sock_bind ","bind cs failed"));
- }
- */
- pj_create_random_string(sendbuff, N);
- sendbuff[N-] = '\0';
- PJ_LOG(,("string","%s",sendbuff));
- len1=sizeof(sendbuff);
- //pj_sock_sendto: Transmit data to the socket to the specified address.
- status=pj_sock_sendto(cs,sendbuff,&len1,,&daddr,sizeof(daddr));
- if(status!=PJ_SUCCESS)
- {
- PJ_LOG(,("sendto","failed"));
- }
- pj_bzero(&addr,sizeof(addr));
- //pj_sock_recv: Receives data stream or message coming to the specified socket.
- status=pj_sock_recv(ss,recvbuff,&len1,);
- if(status!=PJ_SUCCESS)
- {
- PJ_LOG(,("recv","failed"));
- }
- else
- {
- PJ_LOG(,("content","%s",recvbuff));
- }
- pj_shutdown();
- getchar();
- }
test3:udp test: the client and server
In this part I wanna write a program like the classical UDP socket demo,that is to say a simple demo one person send message and the other receive the message,they do it by turn.
But when I do that I find there are some differences between the formal socket and the pjlib socket.
Some function I used like in C/C++ steps,but not successed,such as recvfrom and send.If someone who knows that please tell me,thank you!
In my project,there still have a problem.That is not only the client need the server's IP,but the server needs the client too.
- //UDP test
- //server
- //heat nan
- //notice: the client should send the message first,then the server.And every time the size of the message you send should not too big!
- #include<pjlib.h>
- #define UDP_PORT 6000
- #define ADDRESS "127.0.0.1"
- #define N 100
- #define M 50
- int main()
- {
- pj_status_t status;
- pj_sock_t cs;
- pj_sock_t ss;
- pj_sockaddr_in daddr,saddr;
- pj_str_t s;
- pj_str_t* IP_Addr;
- char sendbuff[M+],recvbuff[N+];
- pj_ssize_t len1,len2;
- status=pj_init();
- if(status!=PJ_SUCCESS)
- {
- PJ_LOG(,("pj_init","failed"));
- }
- status=pj_sock_socket(pj_AF_INET(),pj_SOCK_DGRAM(),,&ss);
- if(status!=)
- {
- PJ_LOG(,("creat ss socket","failed"));
- }
- pj_bzero(&daddr,sizeof(daddr));
- daddr.sin_family=pj_AF_INET();
- daddr.sin_port=pj_htons(UDP_PORT);
- IP_Addr=pj_cstr(&s,ADDRESS);
- daddr.sin_addr.s_addr=pj_htonl(PJ_INADDR_ANY);
- status=pj_sock_bind(ss,&daddr,sizeof(daddr));
- if(status!=)
- {
- PJ_LOG(,("pj_sock_bind ","bind ss failed"));
- }
- pj_bzero(&saddr,sizeof(saddr));
- saddr.sin_family=pj_AF_INET();
- saddr.sin_port=pj_htons(UDP_PORT-);
- IP_Addr=pj_cstr(&s,ADDRESS);
- saddr.sin_addr=pj_inet_addr(IP_Addr);
- while(){
- len1=N;
- status=pj_sock_recv(ss,recvbuff,&len1,);
- if(status==PJ_SUCCESS)
- {
- PJ_LOG(,("recv","success"));
- PJ_LOG(,("context","%s",recvbuff));
- }
- else
- {
- printf("failed\n");
- }
- gets(sendbuff);
- len2=sizeof(sendbuff);
- // PJ_LOG(3,("string","%s",sendbuff));
- status=pj_sock_sendto(ss,sendbuff,&len2,,&saddr,sizeof(saddr));
- if(status!=PJ_SUCCESS)
- {
- PJ_LOG(,("send","failed"));
- }
- else
- {
- }
- }
- getchar();
- return ;
- }
server
- //UDP test
- //Client
- //heat nan
- #include<pjlib.h>
- #define UDP_PORT 6000
- #define ADDRESS "127.0.0.1"
- #define N 50
- #define M 100
- int main()
- {
- pj_status_t status;
- pj_ssize_t len1,len2;
- pj_sock_t cs,ss;
- pj_sockaddr_in daddr,saddr;
- pj_str_t s;
- pj_str_t* IP_Addr;
- char recvbuff[M+],sendbuff[N+];
- status=pj_init();
- if(status!=PJ_SUCCESS)
- {
- PJ_LOG(,("pj_init","failed"));
- }
- status=pj_sock_socket(pj_AF_INET(),pj_SOCK_DGRAM(),,&cs);
- if(status!=)
- {
- PJ_LOG(,("creat cs socket","failed"));
- }
- pj_bzero(&daddr,sizeof(daddr));
- daddr.sin_family=pj_AF_INET();
- daddr.sin_port=pj_htons(UDP_PORT);
- IP_Addr=pj_cstr(&s,ADDRESS);
- daddr.sin_addr=pj_inet_addr(IP_Addr);
- pj_bzero(&saddr,sizeof(saddr));
- saddr.sin_family=pj_AF_INET();
- saddr.sin_port=pj_htons(UDP_PORT-);
- IP_Addr=pj_cstr(&s,ADDRESS);
- saddr.sin_addr=pj_inet_addr(IP_Addr);
- status=pj_sock_bind(cs,&saddr,sizeof(saddr));
- if(status!=)
- {
- PJ_LOG(,("pj_sock_bind ","bind ss failed"));
- }
- /*
- len1=N;
- pj_create_random_string(sendbuff, N);
- sendbuff[N-1] = '\0';
- */
- while(){
- gets(sendbuff);
- len1=sizeof(sendbuff);
- // PJ_LOG(3,("string","%s",sendbuff));
- status=pj_sock_sendto(cs,sendbuff,&len1,,&daddr,sizeof(daddr));
- if(status!=PJ_SUCCESS)
- {
- PJ_LOG(,("sendto","failed"));
- }
- len2=M;
- status=pj_sock_recv(cs,recvbuff,&len2,);
- if(status!=PJ_SUCCESS)
- {
- PJ_LOG(,("recvfrom","failed"));
- }
- else
- {
- PJ_LOG(,("context","%s",recvbuff));
- }
- }
- getchar();
- }
client
PJSIP-PJLIB-Socket的更多相关文章
- [pjsip]Pjlib中配置文件config.h解析
config_site.h 这个头文件包含在config.h中,用于引入平台?(site)/用户特定的配置以控制PJLIB的特性,用户需要自己生成这个文件. 譬如说我们要把PJLIB编译成DLL,那么 ...
- [pjsip]Pjlib中的链表结构
Pjlib的链表结构跟常见的链表结构有所区别,如下图所示: 图1:一般链表结构 图2:pjlib中的链表结构 可以看到一般的双向链表是链表节点包含数据域,而pjlib中是数据域包含链表节点.一般的链表 ...
- PJSIP Socket 模型
前些日子为解决项目中问题调试到PJSIP Socket收发数据部分 ,好记性不如烂笔头,记录下 PJSIP 使用的Socket 模型 ,以备后用. 不同平台下PJSIP采用不同的 Socket模型,W ...
- QT开发pjsip的VOIP,A8平台运行
QT开发pjsip的VOIP 开发环境 平台:A8 环境:Linux-3.0.8 实现功能:使用QT开发VOIP进行初始化.拨号.挂起 测试工具:minisipserver服务器 效果 界面: min ...
- exosip 和 pjsip 简介
oSIP oSIP的开发开始于2000年7月,第一个版本在2001年5月发 布,到现在已经发展到3.x了.它采用ANSI C编写,而且结 构简单小巧,所以速度特别快,它并不提供高层的SIP会话 控制 ...
- 介绍一个开源的SIP(VOIP)协议库PJSIP
本文系转载,出处不可考. 假设你对SIP/VoIP技术感兴趣,哪希望你不要错过:),假设你对写出堪称优美的Code感兴趣 ,那么你也不可错过:) 这期间我想分析一下一个实际的协议栈的设计到实现的相关技 ...
- pjlib深入剖析和使用详解
1. PJSIP简介 PJSIP的实现是为了能在嵌入式设备上高效实现SIP/VOIP.其主要特征包括: 1).极具移植性.(Extremely portable) ...
- PJSIP开源库详解
PJSIP是一个包含了SIP.SDP.RTP.RTCP.STUN.ICE等协议实现的开源库.它把基于信令协议SIP的多媒体框架和NAT穿透功能整合成高层次.抽象的多媒体通信API,这套API能够很容易 ...
- PJSIP开发指南
一.通用设计 1.1 架构 1.1.1 通信图 下面的图展示了SIP消息在PJSIP组件间从后端到前端如何传递的. 1.1.2 类图 下面的图显示类视图 1.2 E ...
随机推荐
- [转]用jwplayer+Nginx搭建视频点播服务器,解决拖动加载慢的问题
flv视频可以采用两种方式发布: 一.普通的HTTP下载方式 二.基于Flash Media Server或Red5服务器的rtmp/rtmpt流媒体方式. 多数知名视频网站都采用的是前一种方式. 两 ...
- May 1 2017 Week 18 Monday
The very essence of romance is uncertainty. 浪漫的精髓就在于它充满了种种可能. Yesterday my girl friend told me that ...
- Jenkins配置(Jenkins如何与maven项目进行连用)
一同事,在问关于Jenkins搭建后,他是如何与我们项目进行连用的,如何通过Jenkins去编译我们的项目的,现在介绍下如何通过Jenkins持续编译我们的项目 配置过程 1.确定我们已经搭建好了Je ...
- v-for的深层用法
为了提升循环的性能,我们会给循环加上一个唯一的key值,这个key值一定是唯一的 <div id='root'> <div v-for='(item,index) of list' ...
- 轻量级HTTP服务器Nginx(常用配置实例)
轻量级HTTP服务器Nginx(常用配置实例) 文章来源于南非蚂蚁 Nginx作为一个HTTP服务器,在功能实现方面和性能方面都表现得非常卓越,完全可以与Apache相媲美,几乎可以实现Apa ...
- mysql如何查看错误代码具体释义?(基于perror)
mysql如何查看错误代码具体释义? 关键词:mysql错误代码,mysql错误号 perror 错误号
- mysql题目(二学年)
1.哪些命令可以知道mysql安装的版本 mysqladmin --version mysql --version 2.关于mysql密码说法正确的是 初始化安装完毕后密码为空 3.进入或者打开数据库 ...
- Logback初始化失败问题排查(Web.xml中context-param配置详解)
监控部分反馈异常,生产系统日志文件竟然木有了(最后一次版本发布后,再也无日志文件生成). 问题排查步骤: 1. 检查logback配置文件 日志生成目录一切正常 应该服务器上磁盘空间未满.操作权限没有 ...
- JS - 兼容的事件助手
(function () { // 兼容的事件助手 window.CompatibleEventHelper = { addEventListener: function (elem, type, c ...
- 基于LNMP环境的ssh2扩展
openssl: 加密算法集合,C语言实现 libssh2:ssh2协议库库,C语言实现 PECL/ssh2: libssh2的php扩展,允许php程序调用libssh2中的函数 依赖关系:PECL ...