Linux c==使用UDP实现网络通信(14)
2016-11-12 22:00
465 查看
UDP
前面已经讲过tcp网络通信,然后tcp每次通信都要进行三次握手连接,虽然传输的可靠性比较高,但对于一些及时性的数据的传输显得太过费时,所以就有了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 =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>
相关文章推荐
- linux中使用UDP实现网络通信
- linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)
- Linux网络编程5——使用UDP协议实现群聊
- 使用C#实现基于TCP和UDP协议的网络通信程序的基本示例
- linux网络编程:使用单进程实现多客户端通信
- Linux中使用C语言实现基于UDP协议的Socket通信示例
- Linux网络编程10——使用UDP实现五子棋对战
- linux 使用epoll实现网络通信
- 在linux网络UDP通信中,关于客户端是否绑定的理解
- 使用SuperSocket实现TLV自定义协议网络通信的Demo
- 通信网络实验——UDP 的socket实现
- VC++实现检测网络状态所有的TCP与UDP通信
- Java网络编程——使用NIO实现非阻塞Socket通信
- VC++实现检测网络状态所有的TCP与UDP通信
- Linux网络编程:TCP服务器(单进程多用户),使用select方法实现
- 使用AF_INET实现UDP点对点通信示例
- 使用UDP套接字实现简单的通信
- Java 网络编程(六) 使用无连接的数据报(UDP)进行通信
- Linux下网络编程实现UDP
- linux下udp 网络间通信程序+书上没有提过的问题自己想法