设为首页 收藏本站
查看: 1311|回复: 0

[经验分享] 基于UDP协议的socket通信

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-5-25 08:47:55 | 显示全部楼层 |阅读模式
UDP提供了无连接通信,且不对传送数据包进行可靠性保证,适合于一次传输少量数据。
具体实现:
udp_server.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<errno.h>
  4 #include<sys/types.h>
  5 #include<sys/socket.h>
  6 #include<unistd.h>
  7 #include<string.h>
  8 #include<arpa/inet.h>
  9 #include<netinet/in.h>
10 void usage(char* argv)
11 {   
12     printf("%s:[ip][port]\n",argv);
13 }
14
15 int main(int argc,char* argv[])
16 {
17     if(argc!=3) //判断传参错误
18     {
19         usage(argv[0]);
20         exit(1);
21     }
22     int port=atoi(argv[2]);
23     char* ip=argv[1];
24     //sock()
25      int sock=socket(AF_INET,SOCK_DGRAM,0); //创建套接字
26     if(sock<0)
27     {
28         perror("sock");
29         exit(2);
30     }
31     struct sockaddr_in local;
32     local.sin_family=AF_INET;
33     local.sin_port=htons(port);
34     local.sin_addr.s_addr=inet_addr(ip);
35     if(bind(sock,(struct sockaddr*)&local,sizeof(local))<0)  //绑定本地地址
36     {
37         perror("bind\n");                                    //UDP面向无连接的,所以                                                                    无需进行监听,接收
38         exit(1);
39     }
40      struct sockaddr_in client;
41      socklen_t size=sizeof(client);
42     char buf[1024];
43     while(1)
44     {
45         size_t _s=recvfrom(sock,buf,sizeof(buf)-1,0,(struct sockaddr*)&clien    t,&size);
46         if(_s>0)
47         {
48             buf[_s-1]='\0';
49             printf("[ip]:%s",inet_ntoa(client.sin_addr));
50             printf("[port]:%ld",ntohs(client.sin_port));
51             printf("get connection..\n");
52             printf("%s\n",buf);
53         }
54         else if(_s==0)
55         {
56             printf("client close\n");
57         }
58         else
59         {
60             perror("read");
61         }
62     }
63
64
65     return 0;
66 }



实现结果:
1
2
3
4
5
6
[admin@www socket]$ ./udp_server 127.0.0.1 8080
[ip]:127.0.0.1[port]:57701get connection..
nihao
[ip]:127.0.0.1[port]:57701get connection..
woaini
^C



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-221434-1-1.html 上篇帖子: ubuntu下使用mutt+msmtp发送邮件 下篇帖子: Varnish缓存部署方式及原理详解 通信
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表