Linux—网络通信(UDP)
2016-11-07 18:57
155 查看
上一章说道了网络通信中的TCP有连接的可靠通信,但是连接意味着消耗时间去访问资源,效率不高,而对于一些要求速度快的通信,那就没这么方便了,因此
这一章主要说明的是UDP通信,它是一种无连接的通信,不需要建立连接,这也意味着它的不可靠性,当然,有利的一面,必然有弊。
这里主要说明它的程序,若对其中的一些函数的使用不清楚的,不知道函数的具体作用、参数的作用、返回值等可以参考上一章《Linux—网络通信(TCP)》http://blog.csdn.net/baidu_35534327/article/details/53056537,这里不做详细的介绍了,直接进入我们的主题
/****************udpServer.c******************************/
/*************************udpClient.c***************************/
这一章主要说明的是UDP通信,它是一种无连接的通信,不需要建立连接,这也意味着它的不可靠性,当然,有利的一面,必然有弊。
这里主要说明它的程序,若对其中的一些函数的使用不清楚的,不知道函数的具体作用、参数的作用、返回值等可以参考上一章《Linux—网络通信(TCP)》http://blog.csdn.net/baidu_35534327/article/details/53056537,这里不做详细的介绍了,直接进入我们的主题
/****************udpServer.c******************************/
#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 =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); }
/*************************udpClient.c***************************/
#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,char **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); }
相关文章推荐
- Linux网络通信(二)Socket编写TCP/UDP
- Linux网络通信编程(套接字模型TCP\UDP与IO多路复用模型select\poll\epoll)
- LinuxUDP网络通信
- Linux网络通信实例(TCP和UDP)
- linux网络通信-------UDP协议
- [Linux网络编程]UDP编程--UDP通信程序客户端
- linux网络通信之udp
- linux 网络编程:客户端与服务器通过TCP协议相互通信 + UDP
- linux中使用UDP实现网络通信
- Linux 网络编程六(socket通信UDP版)
- [Linux网络编程]UDP编程--UDP通信程序服务器端
- linux下udp 网络间通信程序+书上没有提过的问题自己想法
- 基于linux简单的UDP网络通信代码
- linux网络通信(TCP和UDP)
- Linux网络通信(二)Socket编写TCP/UDP
- linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)
- Linux网络通信(二)Socket编写TCP/UDP
- Linux网络通信编程(套接字模型TCP\UDP与IO多路复用模型select\poll\epoll)
- 在linux网络UDP通信中,关于客户端是否绑定的理解
- linux 网络编程:客户端与服务器通过TCP协议相互通信 + UDP