Linux c==使用UDP实现网络通信(14)
来源:互联网 发布:不喝牛奶 知乎 编辑:程序博客网 时间:2024/04/30 10:00
UDP
前面已经讲过tcp网络通信,然后tcp每次通信都要进行三次握手连接,虽然传输的可靠性比较高,但对于一些及时性的数据的传输显得太过费时,所以就有了UDP这种无连接通信,但数据容易出错。
<span style="font-family:SimSun;font-size:18px;">#include <stdlib.h> #include <stdio.h> #include <errno.h> #include <string.h> #include <unistd.h> #include <netdb.h> #include <sys/socket.h> #include <netinet/in.h> #include <sys/types.h> #include <arpa/inet.h> #define SERVER_PORT 8888 #define MAX_MSG_SIZE 1024 void udps_respon(int sockfd) { struct sockaddr_in addr; int addrlen,n; char msg[MAX_MSG_SIZE]; while(1) { /* 从网络上读,并写到网络上 */ bzero(msg,sizeof(msg)); // 初始化,清零 addrlen = sizeof(struct sockaddr); n=recvfrom(sockfd,msg,MAX_MSG_SIZE,0,(struct sockaddr*)&addr,&addrlen); // 从客户端接收消息 msg[n]=0; /* 显示服务端已经收到了信息 */ fprintf(stdout,"Server have received %s",msg); // 显示消息 } } int main(void) { int sockfd; struct sockaddr_in addr; /* 服务器端开始建立socket描述符 */ sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sockfd<0) { fprintf(stderr,"Socket Error:%s\n",strerror(errno)); exit(1); } /* 服务器端填充 sockaddr结构 */ bzero(&addr,sizeof(struct sockaddr_in)); addr.sin_family=AF_INET; addr.sin_addr.s_addr=htonl(INADDR_ANY); addr.sin_port=htons(SERVER_PORT); /* 捆绑sockfd描述符 */ if(bind(sockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr_in))<0) { fprintf(stderr,"Bind Error:%s\n",strerror(errno)); exit(1); } udps_respon(sockfd); // 进行读写操作 close(sockfd); } </span>
<span style="font-family:SimSun;font-size:18px;">#include <stdlib.h> #include <stdio.h> #include <errno.h> #include <string.h> #include <unistd.h> #include <netdb.h> #include <sys/socket.h> #include <netinet/in.h> #include <sys/types.h> #include <arpa/inet.h> #define SERVER_PORT 8888 #define MAX_BUF_SIZE 1024 void udpc_requ(int sockfd,const struct sockaddr_in *addr,int len) { char buffer[MAX_BUF_SIZE]; int n; while(1) { /* 从键盘读入,写到服务端 */ printf("Please input char:\n"); fgets(buffer,MAX_BUF_SIZE,stdin); sendto(sockfd,buffer,strlen(buffer),0,addr,len); bzero(buffer,MAX_BUF_SIZE); } } int main(int argc,charchar **argv) { int sockfd; struct sockaddr_in addr; if(argc!=2) { fprintf(stderr,"Usage:%s server_ip\n",argv[0]); exit(1); } /* 建立 sockfd描述符 */ sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sockfd<0) { fprintf(stderr,"Socket Error:%s\n",strerror(errno)); exit(1); } /* 填充服务端的资料 */ bzero(&addr,sizeof(struct sockaddr_in)); addr.sin_family=AF_INET; addr.sin_port=htons(SERVER_PORT); if(inet_aton(argv[1],&addr.sin_addr)<0) /*inet_aton函数用于把字符串型的IP地址转化成网络2进制数字*/ { fprintf(stderr,"Ip error:%s\n",strerror(errno)); exit(1); } udpc_requ(sockfd,&addr,sizeof(struct sockaddr_in)); // 进行读写操作 close(sockfd); }</span>
0 0
- Linux c==使用UDP实现网络通信(14)
- linux中使用UDP实现网络通信
- [Linux C编程]UDP网络通信
- 网络通信UDP(Linux/Windows)
- Linux—网络通信(UDP)
- c语言udp通信实例(linux)
- c语言udp通信实例(linux)
- UDP实现迭代型网络通信
- 网络通信 Datagram 实现UDP
- linux网络通信之udp
- linux网络通信-------UDP协议
- Linux c==网络编程的理论知识-如何让UDP实现可靠传输 (24)
- 如何使用网络单片机W7100A实现UDP通信
- linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)
- linux网络编程之用多线程实现客户端到服务端的通信(基于udp)
- Linux C实现简单的UDP服务器客户端通信
- Linux下C语言实现简单的udp通信
- Linux C UDP Socket实现客户与服务器简单通信
- hdoj 1568 Fibonacci (斐波那契数列通项公式+取对数)
- Servlet的生命周期与工作原理
- 自建List<>绑定ComboBox下拉框实现省市联动
- 道德经 上篇:道经 第一章
- 十个免费专利检索分析网站
- Linux c==使用UDP实现网络通信(14)
- C++中的回调函数,函数指针理解
- Java发送邮件
- 嵌入式学习--work11 关于SPI的深入学习及软件模拟SPI(LCD调试所遇)
- MySQL触发器
- NOIP考纲 图论
- 征兵
- HDU 1254 推箱子 搜索中搜索
- AdMob(app内嵌广告)原生广告