文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>udp sendto函数的疑惑

udp sendto函数的疑惑

时间:2010-04-12  来源:zhanghonghu84

测试一个udp服务器时,写了如下程序。 #include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/select.h>
#include <netdb.h>
  int main(int argc,char *argv[])
{
 int srv_sock;
 socklen_t clt_len;
 struct sockaddr_in srv_addr;
 struct sockaddr_in clt_addr;
 struct timeval wait_time;
 int port;
 int ret;
 fd_set read_fds;
 int num; 
 char recv_buf[1024];
 if(argc!=2){
  printf("Usage: %s port_name\n",argv[0]);
  return 1;
 }
 
 port=atoi(argv[1]);
 srv_sock=socket(AF_INET,SOCK_DGRAM,0);
 if(srv_sock<0){
  perror("cannot create socket");
  return 1;
 }
   memset(&srv_addr,0,sizeof(srv_addr));
 srv_addr.sin_family=AF_INET;
 srv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
 srv_addr.sin_port=htons(port);
 ret=bind(srv_sock,(struct sockaddr*)&srv_addr,sizeof(srv_addr));
 if(ret<0){
  perror("cannot bind the socket");
  return 1;
 }
   // clt_len = sizeof(struct sockaddr_in);
   
 while(1){
  wait_time.tv_sec=0;
  wait_time.tv_usec=0;
  FD_ZERO(&read_fds);
  FD_SET(srv_sock,&read_fds);
  
  num=select(srv_sock+1,&read_fds,NULL,NULL,&wait_time);
  if(num<0){
   perror("select fail");
   continue;
  }
  
  if(FD_ISSET(srv_sock,&read_fds)){
   int n=recvfrom(srv_sock,recv_buf,sizeof(recv_buf),0,(struct sockaddr*)&clt_addr,&clt_len);
   printf("clt_len is %d\n",clt_len);
   if(n<0){
    perror("cannot receive client message");
    close(srv_sock);
    return 1;
   }
   recv_buf[n] = 0;
   printf("server receive: %s\n",recv_buf);
   memset(recv_buf,0,sizeof(recv_buf));
   
   n = sendto(srv_sock,"hello\n",6,0,(struct sockaddr*)&clt_addr,clt_len);
   if(n < 0)
   {
       perror("can't sent client message");
   }
  
   
  } 
 }
}
  测试代码时,发现服务器第一次收到数据发送总是提示 can't sent client message: Address family not supported by protocol   后面的就会一直成功。   不明白什么原因。   比较了几个udp例子之后,发现把程序里面红色部分不注释掉,就可以成功了。   始终找不到原因,到后续再看看源代码看怎么解决?   希望知道的兄弟能说下。
相关阅读 更多 +
排行榜 更多 +
扑击萌兽大逃亡手游下载

扑击萌兽大逃亡手游下载

休闲益智 下载
gate交易平台app免费版

gate交易平台app免费版

金融理财 下载
Uniswap中文版app安卓版

Uniswap中文版app安卓版

金融理财 下载