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

 ·屏幕保护导致我的程序错误    »显示摘要«
    摘要: 本人开发的一应用程序,执行后,如果操作系统使用了屏保,当在屏保状态输入屏保密码进入windows后,就提示我的应用程序错误,弹出一错误提示窗体,内容是: appname:我的程序名称 appver:我的程序版本 modname:kernel32.dll modver:5.12600.21800 offset:001eb3 要查看关于错误报告的技术信息,请单击此处。 单击此处后,弹出一大堆什......
    摘要: 小弟我写的一段显示日历的代码 ym=year(currentdate)&"-"&month(currentdate)&"-" i=day(date()) j=1 do while j<8 if isdate(ym&i) then currentweekday=weekday(ym&i) response.......


《《问题》》 关于TCP包接收的问题,为何只能接收几次就停了呢

我有一个C的TCP包接收程序如下:  
  static   void   tcpecho_thread(void   *arg)  
  {  
          int   sockfd,   new_fd;  
          struct   sockaddr_in   my_addr;  
          struct   sockaddr_in   their_addr;  
          int   sin_size;  
          int   numbytes;  
          int   port_numb   =   8686;  
          char   buf[256];  
           
          if((sockfd   =   socket(AF_INET,   SOCK_STREAM,   0))   ==   -1)  
          {  
                  printf("\n   TCP   socket   open   error!");  
                  close(sockfd);  
          return;  
          }  
          else  
                  printf("\n   TCP   socket   open   ok!");        
         
          //initialize   &   bind  
          my_addr.sin_family   =   AF_INET;  
          my_addr.sin_port   =   htons(port_numb);  
          my_addr.sin_addr.s_addr   =   INADDR_ANY;  
          BZERO(&(my_addr.sin_zero),8);  
           
          //bind   socket  
          if(bind(sockfd,   (struct   sockaddr   *)&my_addr,   sizeof(struct   sockaddr))==   -1)  
          {  
                  printf("\n   TCP   socket   bind   error!");  
                  close(sockfd);  
          return;  
          }  
          else  
                  printf("\n   TCP   socket   bind   ok!");        
           
           
          //create   listen   socket.  
          if(listen(sockfd,   10)   ==   -1)  
          {  
                  printf("\n   TCP   socket   listen   error!");  
                  close(sockfd);  
          return;  
          }  
          else  
                  printf("\n   TCP   socket   listen   ok!");        
   
          //wait   fot   connection  
          while(1)  
          {  
                  sin_size   =   sizeof(struct   sockaddr_in);  
                   
                  if((new_fd   =   accept(sockfd,   (struct   sockaddr   *)&their_addr,   &sin_size))   ==   -1)  
                  {  
                          printf("\n   New   socket   can   not   be   created!");  
                          return;  
                  }  
                  else  
                          printf("\n   New   socket   is   created!");  
                           
                  //Read   info  
                  if((numbytes   =   recv(new_fd,   buf,   256,   0))   ==   -1)  
                  {  
                          printf("\n   Read   data   error!");  
                          return;  
                  }  
                  else  
                  {  
                          printf((char   *)buf);  
                          printf("\n   Read   data!");  
                  }  
                   
                  //Send   info   back  
                  if(send(new_fd,   "ok!",   strlen("ok!"),   0)   ==   -1)  
                  {  
                          printf("\n   Send   Error!");  
                          return;  
                  }  
                  else  
                          printf("\n   Send   ok!");  
                           
                  //close(new_fd);  
          }  
          //close(new_fd);  
          close(sockfd);  
  }  
   
  另外一端用程序发送TCP打包的字串,程序运行后发现每次在打印“Read   data!”的地方只出现了8次就再也不出现了,socket连接是没有问题的,大家有没有好的建议,多谢!  
   
  TCP包接收后一定要会复消息,我这样写不知道可以吗?

NO.1   作者: umbrella1984

accept放到外面,你这个在循环里面需要在客户端每次发信息时也要重新连接一次。

NO.2   作者: fangxinyan

属于阻塞式的,accept(sockfd,   (struct   sockaddr   *)&their_addr,   &sin_size))   ==   -1),会一直阻在那里,等待下一个连接消息的请求,可以设计多线程。若只是一个计算机连接,则把accept提出循环外边,但是现在循环还没有出口呢?  
 

NO.3   作者: popyyb

估计你发包的程序有问题


    摘要: default.aspx ---------------------- private void page_load(object sender, system.eventargs e) { string url1 = "http://localhost/test.asp"; string url2 = "http://localhost/test.asp......
» 本期热门文章:

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