Linux C语言实现 UDP Socket
来源:互联网 发布:matlab设有数组定义,x 编辑:程序博客网 时间:2024/04/29 14:21
两种方式,阻塞式和非阻塞式。如下代码片段注释掉的部分为阻塞式,打开不部分为非阻塞式。
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <strings.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h> /* netbd.h is needed for struct hostent */ #define MAXDATASIZE 100 /* Max number of bytes of data */int CheckSvrAlive(char* pstrSvrIP, int nPotr){ int iter = 0, nRecvNum = 0, nReturn = 0; int sockfd; /* socket descriptors */ char recvbuf[MAXDATASIZE]; /* buf will store received text */ char sendbuf[MAXDATASIZE]; struct hostent *pHostent; /* structure that will get information about remote host */ struct sockaddr_in sockAddrInfo; /* sockAddrInfo's address information */ socklen_t nSocketLen; if ((pHostent=gethostbyname(pstrSvrIP))==NULL){ /* calls gethostbyname() */ printf("gethostbyname() error\n"); exit(1); } if ((sockfd=socket(AF_INET, SOCK_DGRAM, 0))==-1){ /* calls socket() */ printf("socket() error\n"); exit(1); } bzero(&sockAddrInfo,sizeof(sockAddrInfo)); sockAddrInfo.sin_family = AF_INET; sockAddrInfo.sin_port = htons(nPotr); /* htons() is needed again */ sockAddrInfo.sin_addr = *((struct in_addr *)pHostent->h_addr); /*pHostent->h_addr passes "*pHostent"'s info to "h_addr" */ struct timeval tv; fd_set readfds; tv.tv_sec = 1; tv.tv_usec = 0; FD_ZERO(&readfds); FD_SET(sockfd, &readfds); nSocketLen = sizeof(struct sockaddr_in); for (iter=0; iter<=3; iter++) { sprintf(sendbuf,"data packet with ID %d\n",iter); sendto(sockfd, sendbuf, strlen(sendbuf), 0, (struct sockaddr *)&sockAddrInfo, nSocketLen);/* if ((nRecvNum=recvfrom(sockfd,recvbuf, MAXDATASIZE, 0, (struct sockaddr *)&sockAddrInfo,&nSocketLen)) == -1){ printf("recvfrom() error\n"); nReturn = 0; break; }*/ if (select(sockfd+1,&readfds,NULL, NULL, &tv) > 0) { if ((nRecvNum = recvfrom(sockfd,(void *)recvbuf, MAXDATASIZE, 0, (struct sockaddr *)&sockAddrInfo, &nSocketLen)) == -1) { printf("recvfrom() error\n"); nReturn = 0; break; } } else { printf("timeout! there is no data arrived!\n"); nReturn=0; break; } recvbuf[nRecvNum]='\0'; printf("sockAddrInfo Return Reverse Message: %s\n",recvbuf); /* it prints sockAddrInfo's welcome message */ if(strcmp(sendbuf, recvbuf)==0) { nReturn = 1; break; } } close(sockfd); return nReturn;}
参考:http://blog.csdn.net/tjssehaige/article/details/8546849
0 0
- Linux C语言实现 UDP Socket
- Linux下C语言实现UDP Socket编程
- Linux下C语言实现UDP Socket编程
- Linux下C语言实现UDP Socket编程
- C语言--利用UDP实现socket通信
- C语言Linux下的Socket 编程(UDP)
- Linux C语言Socket编程例子(TCP和UDP)
- Linux C语言 UDP
- Linux C UDP Socket实现客户与服务器简单通信
- Linux C socket 基于 UDP
- Linux C语言实现的Socket通信
- Linux下C语言Socket实现文件传输
- Socket编程(TCP/UDP) - 初学(C语言)
- C语言udp socket发送结构体
- Linux UDP下C语言实现TFTP协议客户端
- Linux UDP下C语言实现TFTP协议客户端 .
- Linux下C语言实现简单的udp通信
- 【Linux】Linux C socket 编程之UDP
- 关于string
- EhCache简单使用
- 理解C++右值引用
- Ajax Post提交事例及SpringMVC注解@RequestMapping取不到参数值解决办法
- 对象的内存布局
- Linux C语言实现 UDP Socket
- Android多次重启系统的功能实现
- C++文件读写详解(ofstream,ifstream,fstream)
- RedHat VNC 配置
- 第13周C++兄弟营团队学习情况记录表
- Android应用如何监听自己是否被卸载及卸载反馈功能的实现(第三版)
- mybatis缓存机制
- 在iOS系统中使用fopen函数
- 判断手机是否处于USB模式(手机是否作为存储连接到PC)