首页 / LINUX / linux下的UDP套接字编程
linux下的UDP套接字编程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux下的UDP套接字编程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3487字,纯文字阅读大概需要5分钟。
内容图文
![linux下的UDP套接字编程](/upload/InfoBanner/zyjiaocheng/1241/59151de4cadf4a5aa6349500cd123009.jpg)
一.相关过程以及知识请详见我的另一篇博客《winsock套接字编程》,这里不再累述。
二.相关代码:
server.c:
1 /**************************************** 2 > File Name:server.c 3 > Author:xiaoxiaohui 4 > mail:1924224891@qq.com 5 > Created Time:2016年05月21日 星期六 15时05分23秒 6 ****************************************/ 7 8 #include<stdio.h> 9 #include<stdlib.h> 10 #include<sys/types.h> 11 #include<sys/socket.h> 12 #include<unistd.h> 13 #include<arpa/inet.h> 14 #include<netinet/in.h> 15 #include<string.h> 16 17 const int PORT = 9090; 18 const int LEN = 1024; 19 int serverSock; 20 struct sockaddr_in local; 21 struct sockaddr_in client; 22 23 24 int main() 25 { 26 serverSock = socket(AF_INET, SOCK_DGRAM, 0); 27 28 local.sin_family = AF_INET; 29 //local.sin_addr.s_addr = htonl(INADDR_ANY); 30 local.sin_port = htons(PORT); 31 local.sin_addr.s_addr = inet_addr("127.0.0.1"); 32 bind(serverSock, (struct sockaddr*)&local, sizeof(local)); 33 34 char buf[LEN]; 35 while(1) 36 { 37 int ret = 0; 38 socklen_t len = sizeof(client); 39 memset(buf, ‘\0‘, LEN); 40 ret = recvfrom(serverSock, buf, LEN - 1, 0, (struct sockaddr*)&client, &len); 41 42 printf("ret is %d", ret); 43 if(ret == 0) 44 { 45 printf("client is closed!\n"); 46 exit(2); 47 } 48 else if(ret < 0) 49 { 50 perror("recvfrom"); 51 continue; 52 } 53 else 54 { 55 buf[ret] = ‘\0‘; 56 printf("client[ip:%s][port:%d]# %s\n", inet_ntoa(client.sin_addr), 57 ntohs(client.sin_port), buf); 58 fflush(stdout); 59 } 60 61 if(strstr(buf, "quit") != NULL) 62 { 63 close(serverSock); 64 return 0; 65 } 66 } 67 return 0; 68 }
client.c:
1 /**************************************** 2 > File Name:client.c 3 > Author:xiaoxiaohui 4 > mail:1924224891@qq.com 5 > Created Time:2016年05月21日 星期六 15时35分32秒 6 ****************************************/ 7 8 #include<stdio.h> 9 #include<sys/types.h> 10 #include<sys/socket.h> 11 #include<unistd.h> 12 #include<arpa/inet.h> 13 #include<netinet/in.h> 14 #include<string.h> 15 16 const int PORT = 9090; 17 const char* IP = "127.0.0.1"; 18 //const char* IP = "192.168.0.145"; 19 const int LEN = 1024; 20 int clientSock; 21 struct sockaddr_in server; 22 23 int main() 24 { 25 26 clientSock = socket(AF_INET, SOCK_DGRAM, 0); 27 28 server.sin_family = AF_INET; 29 server.sin_addr.s_addr = inet_addr(IP); 30 server.sin_port = htons(PORT); 31 32 char buf[LEN]; 33 while(1) 34 { 35 memset(buf, ‘\0‘, LEN); 36 printf("please input: "); 37 fflush(stdout); 38 gets(buf); 39 40 int ret = sendto(clientSock, buf, strlen(buf), 0, (struct sockaddr*)&server, sizeof(server)); 41 if(ret <= 0) 42 { 43 perror("sendto"); 44 continue; 45 } 46 47 if(strcmp(buf, "quit") == 0) 48 { 49 close(clientSock); 50 return 0; 51 } 52 } 53 54 return 0; 55 }
Makefile:
1 .PHONY:all 2 all:server client 3 4 server:server.c 5 gcc -o $@ $^ -g 6 client:client.c 7 gcc -o $@ $^ -g 8 9 .PHONY:clean 10 clean: 11 rm -f server client
执行结果:
三.总结:
UDP套接字编程是不用建立链接的,所以服务器不用listen和accept,客户端不用connect,recvfrom和sendto中有对方的套接字信息。
UDP因为是面向链接的,所以在传输数据过程中比TCP要高效,适用于流媒体或对可靠性要求不高的应用。
本文出自 “水仙花” 博客,请务必保留此出处http://10704527.blog.51cto.com/10694527/1782717
原文:http://10704527.blog.51cto.com/10694527/1782717
内容总结
以上是互联网集市为您收集整理的linux下的UDP套接字编程全部内容,希望文章能够帮你解决linux下的UDP套接字编程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。