博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PJSIP-PJLIB-Socket
阅读量:4458 次
发布时间:2019-06-08

本文共 8653 字,大约阅读时间需要 28 分钟。

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.

test1:get hostname and host address

1 //PJLIP I/O 2 //Socket test->get hostname and hostaddress 3 //heat nan 4 #include
5 int main() 6 { 7 pj_status_t status; 8 pj_in_addr hostaddr; //This structure describes Internet address. 9 // dada fields pj_uint32_t s_addr. The 32bit IP address. 10 unsigned char *hostaddr_str;11 const pj_str_t *hostname;12 //pj_init13 status=pj_init();14 if(status!=PJ_SUCCESS)15 {16 PJ_LOG(3,(" ","init failed!"));17 }18 //gethostname19 hostname=pj_gethostname();20 if(!hostname||!hostname->ptr||!hostname->slen)21 {22 PJ_LOG(3,( "gethostname","faild"));23 }24 else25 {26 PJ_LOG(3,("gethostname","the hostname is %s",hostname->ptr));27 }28 hostaddr=pj_gethostaddr();29 if(hostaddr.s_addr)30 {31 hostaddr_str=pj_inet_ntoa(hostaddr);//function pj_in_addr -> char *32 //Convert an Internet host address given in network byte order to string in standard numbers and dots notation.33 PJ_LOG(3,("gethostaddress","%s",hostaddr_str));34 }35 else36 {37 PJ_LOG(3,("gethostaddress","failed"));38 }39 40 pj_shutdown();41 getchar();//show the result before you enter any key42 }
get hostname

test2:sendto and recv message use udp;

1 // PJLIB I/O UDP test 2 //heat nan 3 //server 4 #include
5 #define UDP_PORT 6000 6 #define ADDRESS "127.0.0.1" 7 #define N 100 8 int main( ) 9 {10 pj_status_t status;11 pj_sockaddr_in addr;12 int length=sizeof(addr);13 pj_sock_t cs;14 pj_sock_t ss;15 pj_sockaddr_in daddr;16 pj_sockaddr_in saddr;17 pj_str_t s;18 pj_str_t* IP_Addr;19 char recvbuff[N+5];20 char sendbuff[N+5];21 pj_ssize_t len1;22 status=pj_init();23 if(status!=PJ_SUCCESS)24 {25 PJ_LOG(3,("pj_init","failed"));26 }27 28 //now we creat a socket ss29 status=pj_sock_socket(pj_AF_INET(),pj_SOCK_DGRAM(),0,&ss);30 if(status!=0)31 {32 PJ_LOG(3,("creat ss socket","failed"));33 }34 //now we creat a socket cs 35 status=pj_sock_socket(pj_AF_INET(),pj_SOCK_DGRAM(),0,&cs);36 if(status!=0)37 {38 PJ_LOG(3,("creat cs socket","failed"));39 }40 41 42 pj_bzero(&daddr,sizeof(daddr));43 daddr.sin_family=pj_AF_INET();44 daddr.sin_port=pj_htons(UDP_PORT);45 IP_Addr=pj_cstr(&s,ADDRESS);46 daddr.sin_addr=pj_inet_addr(IP_Addr);47 48 status=pj_sock_bind(ss,&daddr,sizeof(daddr));49 if(status!=0)50 {51 PJ_LOG(3,("pj_sock_bind ","bind ss failed"));52 }53 54 55 /* 56 pj_bzero(&saddr,sizeof(saddr));57 saddr.sin_family=pj_AF_INET();58 saddr.sin_port=pj_htons(UDP_PORT-1);59 IP_Addr=pj_cstr(&s,ADDRESS);60 saddr.sin_addr=pj_inet_addr(IP_Addr);61 62 status=pj_sock_bind(cs,&saddr,sizeof(saddr));63 if(status!=0)64 {65 PJ_LOG(3,("pj_sock_bind ","bind cs failed"));66 }67 */68 pj_create_random_string(sendbuff, N);69 sendbuff[N-1] = '\0';70 PJ_LOG(3,("string","%s",sendbuff));71 len1=sizeof(sendbuff);72 73 74 //pj_sock_sendto: Transmit data to the socket to the specified address.75 status=pj_sock_sendto(cs,sendbuff,&len1,0,&daddr,sizeof(daddr));76 if(status!=PJ_SUCCESS)77 {78 PJ_LOG(3,("sendto","failed"));79 }80 81 pj_bzero(&addr,sizeof(addr));82 //pj_sock_recv: Receives data stream or message coming to the specified socket.83 status=pj_sock_recv(ss,recvbuff,&len1,0);84 if(status!=PJ_SUCCESS)85 {86 PJ_LOG(3,("recv","failed"));87 }88 else89 {90 PJ_LOG(3,("content","%s",recvbuff));91 }92 pj_shutdown();93 getchar();94 95 }
View Code

 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.

1 //UDP test 2 //server    3 //heat nan 4 //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! 5 #include
6 #define UDP_PORT 6000 7 #define ADDRESS "127.0.0.1" 8 #define N 100 9 #define M 5010 int main()11 { 12 pj_status_t status;13 pj_sock_t cs;14 pj_sock_t ss;15 pj_sockaddr_in daddr,saddr;16 pj_str_t s;17 pj_str_t* IP_Addr;18 char sendbuff[M+5],recvbuff[N+5];19 pj_ssize_t len1,len2;20 status=pj_init();21 if(status!=PJ_SUCCESS)22 {23 PJ_LOG(3,("pj_init","failed"));24 }25 26 status=pj_sock_socket(pj_AF_INET(),pj_SOCK_DGRAM(),0,&ss);27 if(status!=0)28 {29 PJ_LOG(3,("creat ss socket","failed"));30 }31 32 pj_bzero(&daddr,sizeof(daddr));33 daddr.sin_family=pj_AF_INET();34 daddr.sin_port=pj_htons(UDP_PORT);35 IP_Addr=pj_cstr(&s,ADDRESS);36 daddr.sin_addr.s_addr=pj_htonl(PJ_INADDR_ANY);37 38 status=pj_sock_bind(ss,&daddr,sizeof(daddr));39 if(status!=0)40 {41 PJ_LOG(3,("pj_sock_bind ","bind ss failed"));42 }43 44 45 pj_bzero(&saddr,sizeof(saddr));46 saddr.sin_family=pj_AF_INET();47 saddr.sin_port=pj_htons(UDP_PORT-1);48 IP_Addr=pj_cstr(&s,ADDRESS);49 saddr.sin_addr=pj_inet_addr(IP_Addr);50 51 while(1){52 len1=N;53 status=pj_sock_recv(ss,recvbuff,&len1,0);54 if(status==PJ_SUCCESS)55 {56 PJ_LOG(3,("recv","success"));57 PJ_LOG(3,("context","%s",recvbuff));58 }59 60 else61 {62 printf("failed\n");63 }64 65 66 gets(sendbuff);67 len2=sizeof(sendbuff);68 // PJ_LOG(3,("string","%s",sendbuff));69 status=pj_sock_sendto(ss,sendbuff,&len2,0,&saddr,sizeof(saddr));70 if(status!=PJ_SUCCESS)71 {72 PJ_LOG(3,("send","failed"));73 }74 else75 { 76 77 }78 79 } 80 81 82 getchar();83 return 0;84 }
server
1 //UDP test 2 //Client  3 //heat nan 4 #include
5 #define UDP_PORT 6000 6 #define ADDRESS "127.0.0.1" 7 #define N 50 8 #define M 100 9 int main()10 {11 pj_status_t status;12 pj_ssize_t len1,len2;13 pj_sock_t cs,ss;14 pj_sockaddr_in daddr,saddr;15 pj_str_t s;16 pj_str_t* IP_Addr;17 char recvbuff[M+5],sendbuff[N+5];18 status=pj_init();19 20 if(status!=PJ_SUCCESS)21 {22 PJ_LOG(3,("pj_init","failed"));23 }24 25 status=pj_sock_socket(pj_AF_INET(),pj_SOCK_DGRAM(),0,&cs);26 if(status!=0)27 {28 PJ_LOG(3,("creat cs socket","failed"));29 }30 31 pj_bzero(&daddr,sizeof(daddr));32 daddr.sin_family=pj_AF_INET();33 daddr.sin_port=pj_htons(UDP_PORT);34 IP_Addr=pj_cstr(&s,ADDRESS);35 daddr.sin_addr=pj_inet_addr(IP_Addr);36 37 pj_bzero(&saddr,sizeof(saddr));38 saddr.sin_family=pj_AF_INET();39 saddr.sin_port=pj_htons(UDP_PORT-1);40 IP_Addr=pj_cstr(&s,ADDRESS);41 saddr.sin_addr=pj_inet_addr(IP_Addr);42 43 44 status=pj_sock_bind(cs,&saddr,sizeof(saddr));45 if(status!=0)46 {47 PJ_LOG(3,("pj_sock_bind ","bind ss failed"));48 }49 50 /*51 len1=N;52 pj_create_random_string(sendbuff, N);53 sendbuff[N-1] = '\0';54 */55 while(1){56 gets(sendbuff);57 len1=sizeof(sendbuff);58 // PJ_LOG(3,("string","%s",sendbuff));59 status=pj_sock_sendto(cs,sendbuff,&len1,0,&daddr,sizeof(daddr));60 if(status!=PJ_SUCCESS)61 {62 PJ_LOG(3,("sendto","failed"));63 }64 65 66 len2=M;67 status=pj_sock_recv(cs,recvbuff,&len2,0);68 if(status!=PJ_SUCCESS)69 {70 PJ_LOG(3,("recvfrom","failed"));71 }72 else73 {74 PJ_LOG(3,("context","%s",recvbuff));75 }76 }77 78 getchar();79 80 }
client

 

 

 

 

 

 

转载于:https://www.cnblogs.com/heat-man/p/3633621.html

你可能感兴趣的文章
hadoop yarn ui applications list 研究
查看>>
shiro(三),使用第三方jdbcRealm连接数据库操作
查看>>
当asp.net core偶遇docker二(打造个人docker镜像)
查看>>
改善C#程序的50种方法(转)
查看>>
SSH整合简单实例
查看>>
大学学不会逃课是不会有出息的!
查看>>
Codeforces 960B(优先队列)
查看>>
语言基础(5):程序内存结构
查看>>
angular filter
查看>>
JLabel作为展现元素时需要注意的事项
查看>>
初次接触git
查看>>
eclipse 导入android工程后找不到R资源
查看>>
室内装修
查看>>
《nginx源代码解析》系列分享专栏
查看>>
2-01 ASCII码与二进制转
查看>>
3-04函数-默认参数
查看>>
vs 编译error1083
查看>>
re 正则模块
查看>>
PHP实用代码片段(二)
查看>>
按时间分区自动建分区表
查看>>