当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

 ·c初学者问题,谢谢啦    »显示摘要«
    摘要: 大家好,我是刚开始学习c语言的,拿到题目还没有思路,下面想请教两道题目,请大家用c语言帮着解答一下,最好能告诉我思路是什么,谢谢了。 (1)编写moc(s1)函数,将字符串s1中出现的“0”-“9”数字字符转换成为“a”-“j”大写字母,其余字符不变,结果还是存放在s1中。 (2)编写一个完整的程序,将命令行输入的若干个文本文件合并到第一个文本文件中,例如,该程序名为exp4,生成exe文......
    摘要: 我们在unix的环境下编写了一个进程程序,客户端发送命令字来连接。我们在接受到客户 端发过来的包的时候,有时会出现进程僵死掉,客户端始终处于waiting的状态。检查了我 们的进程,发现它又是可以接受信号直接被stop掉, 实在不知道是什么原因。 请高手能否给个意见,到底是什么原因,该怎么查原因? 谢谢 !!!!!!!!!!!!! ......


一个UDP接受的问题

我在服务器上接受UDP数据,当服务器启动的时候,第一次接受到客户段发送过来的数据是不能得到他的地址,当客户端第2次发送以后就可以得到正常的地址。  
  我的程序大概如下:  
   
  int   udp_listen_fd   ;  
  int   create_udp_socket(void)    
  {  
  int   ret   ;  
   
  struct   sockaddr_in   serv_addr   ;//   myselfhost;  
   
  /*   bint   listen   udp   fd*/  
  BZERO(&serv_addr,sizeof(serv_addr))   ;  
  serv_addr.sin_family   =   AF_INET   ;  
  serv_addr.sin_addr.s_addr   =   htonl(INADDR_ANY)   ;  
  serv_addr.sin_port   =   htons(get_port());  
   
  udp_listen_fd   =     socket(AF_INET,   SOCK_DGRAM,   0);  
   
  if(-1   ==   udp_listen_fd){  
  return   -1   ;  
  }  
   
  if(-1   ==   bind(udp_listen_fd,   (struct   sockaddr*)&serv_addr,sizeof(serv_addr))   ){  
  return   -1;  
  }  
  return   0   ;  
  }  
   
  int   udp_message_handle(int   fd)    
  {  
  int   ret   ,sock_len;  
  char   send_buf[1024]   ;  
   
  struct   sockaddr_in   cli_addr   ;  
   
  BZERO(&send_buf,   sizeof(send_buf))   ;  
   
  ret   =   recvfrom(fd,   &send_buf,   sizeof(send_buf),   0,   (struct   sockaddr   *)&cli_addr,   &sock_len   )     ;  
  if(ret   <   sizeof(send_buf.uggcp)   )  
  return   1   ;  
   
  fprintf(stderr,"received   udp   connect   from   %s:%d\n",inet_ntoa(cli_addr.sin_addr),   ntohs(cli_addr.sin_port));  
   
   
  /*   send   success   message   to   client   ,    
    *   no   matter   what   register   client   UDP   REGISTER      
    *   success   or   not    
    */  
  sendto(fd,   &send_buf,   sizeof(uggcp_t),0,  
  (struct   sockaddr*)&(cli_addr),   sock_len)   ;  
   
  return   0   ;  
  }  
  输出的结果是:  
  received   udp   connect   from   0.0.0.0:0  
  如果我在client第2次连接的话就对了  
   
  请问这是什么问题啊?

NO.1   作者: linaxing

问题出在这里:  
  ret   =   recvfrom(fd,   &send_buf,   sizeof(send_buf),   0,   (struct   sockaddr   *)&cli_addr,   &sock_len   )     ;  
   
  sock_len是一个值结果参数,而你并没有事先给它赋值,所以导致第一次取不到地址。  
  当第二次连接时由于recvfrom()给sock_len赋了值,所以你就能取得地址了。  
   
  解决方法:  
  recvfrom()前增加一行  
  sock_len=sizeof(cli_addr);  
 


    摘要: string connstr; connstr = configurationsettings.appsettings["archives"]; oledbconnection currconn = new oledbconnection(connstr); oledbdataadapter curradapter = new oledbdata......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE