当前位置:  技术问答>linux和unix

客户重连服务器的问题

    来源: 互联网  发布时间:2015-08-19

    本文导语:  服务器代码,如下: #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #define PORT     15888 #define BUFSIZE  1024 vectorvfds; int Bedaemon(void) { pid_t pid; if ( (pid=fork()) = ...

服务器代码,如下:
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define PORT     15888
#define BUFSIZE  1024

vectorvfds;

int Bedaemon(void)
{
pid_t pid;
if ( (pid=fork()) = nRetVal )
           nRetVal = (*iter);
   return nRetVal+1;
}

int main(int argc, char **argv)
{
   int serverfd,maxfd;
   fd_set readfds;
   struct sockaddr_in svaddr;
   struct sockaddr_in claddr;
   int sin_size;
   char buf[BUFSIZE]={0};

   Bedaemon();

   if ( ( serverfd = socket( AF_INET, SOCK_STREAM, 0 ) ) == -1 )
   {
       herror("socket");
       exit(1);
   }

   svaddr.sin_family = AF_INET;
   svaddr.sin_port = htons(PORT);
   svaddr.sin_addr.s_addr = INADDR_ANY;
   bzero(&(svaddr.sin_zero),0);

   if ( bind(serverfd, (struct sockaddr*)&svaddr, sizeof(struct sockaddr)) == -1 )
   {
       perror("bind");
       exit(1);
   }

   if ( listen(serverfd,20) == -1 )
   {
       perror("listen");
       exit(1);
   }

   vfds.push_back( 0 );            // std in
   vfds.push_back( serverfd );     // serverfd

   FD_ZERO( &readfds );
   FD_SET( vfds[0], &readfds );
   FD_SET( vfds[1], &readfds );

   struct timeval tv;
   tv.tv_sec = 2;
   tv.tv_usec = 500000;

   vector::iterator iter;
   int nClientfd;
   while(1)
   {
       maxfd = GetMaxfd( vfds );
       printf("max fd is %dn", maxfd);
       if ( select(maxfd, &readfds, NULL, NULL, NULL) == -1 )
       {
           perror("select");
           exit(1);
       }

       if ( FD_ISSET( serverfd, &readfds ) )
       {
           sin_size = sizeof(struct sockaddr_in);
           if ( ( nClientfd = accept(serverfd,(struct sockaddr*)&claddr,
                   (socklen_t*)&sin_size)) == -1 )
           {
               perror("accept");
               continue;
           }
           vfds.push_back( nClientfd );
           FD_SET( nClientfd, &readfds );
           printf("Server:connected form client with addr:%sn",
                           inet_ntoa(claddr.sin_addr));
       }
       iter = vfds.begin();
       iter = iter + 2;
       for ( ; iter != vfds.end(); iter++ )
       {
           if ( FD_ISSET( (*iter), &readfds ) )
           {
               int nReadRes = read((*iter), buf, 1024 );
               if ( nReadRes == -1 || nReadRes == 0 )
               {
                   perror("read");
                   FD_CLR( (*iter), &readfds );
                   shutdown((*iter),2);
                   vfds.erase( iter );
                   iter--;
               }
               else
                   printf( "The Data is %sn", buf );
           }
       }
       sleep(1);
   }
   return 0;
}


客户端是在windows下,关闭连接的时候调用了closesocket(sockfd);
连接:
socket();
connect();
第一次连接没问题,但是closesocket之后再连就不行了,服务器在select()这里阻塞了
大侠们帮忙看一下

|
这个程序的框架不大对,可以参照一下stevens的书

    
 
 

您可能感兴趣的文章:

  • 如何用jsp或者是java写出一个可以访问客户端的应用(就象activeX一样重服务器下在到客户,用一操做客户的资源)
  • 用LINUX做HELIX服务器,用W2K做客户机,客户机视频点播,连接时出现问题!!!!
  • 在Linux下开发手机客户端或Pc客户端交互的服务器,需要学哪些知识?
  • linux端是服务器,客户端连接后,有时并不知道客户端断开,怎么侦测?
  • 如何控制Corba客户端的连接?(比如在服务器上可以关掉客户端的连接)(发言就给分)
  • 已和客户端连接建立的socket在客户端CTRL-C后怎么在服务器端捕捉这个错误?
  • 请问tcp 客户服务器模型(C/S模型)客户端两个send如果发送间隔太短,服务器端为什么会认为受到的只是一个包
  • socket编程,服务器会用bind()绑定端口,而客户端不用绑定端口就可以调用connect()。那么客户端的端口时系统自己分配的么?是何时绑定的?
  • 客户端 不能发送信息到服务器端?(在SOCKET)请看看下面这段程序有什么错?----客户端的发送信息服务器端收不了!
  • 问一个socket问题,服务器不停send,客户端进入睡眠服务器会断开
  • 服务器端关闭,客户端select 会一直可读, 读的长度是-1,怎么在不关闭客户端socket下,清除可读
  • 服务器端的共享内存可否被远程客户端的进程所挂载使用?
  • tcpip服务器客户端的小问题?
  • 关于客户服务器结构与浏览器服务器结构编程的比较
  • 利用UDP时客户端为何接收到不到服务器发来的消息????
  • 我的DNS服务器端能用,提示query logging is OFF,在客户端 不能用,提示找不到服务器
  • Applet 是在服务器端执行还是在客户端执行??
  • 帮我理理客户端运行的applet调用服务器数据库的问题?
  • 客户机和服务器可以双向收发数据的socket编程
  • 客户端 socket 断开后 服务器端系统如何处理?
  • socket 通讯问题!客户端获取服务端数据问题,死活都是0!
  • 关于B/S结构的客户端打印的问题,求教各位 各位大虾,我用servlet和jsp作了一套b/s的系统,现在客户端需要打印,怎样才能实现?帮帮忙啊,小弟再此先谢过了!
  • socket编程中客户端绑定端口的问题,请兄弟们指点一下
  • 求教 "客户进程" 与 "守护进程" 间通信问题
  • VMware关于服务机访问客户机问题,急!
  • 客户与服务连接的问题.
  • fedora 校园客户端认证问题
  • ftp服务器及客户端的相关问题
  • 重分求助!!!!javascript如何调用客户端dll问题
  • OpenVPN客户端的使用问题
  • 难题?!关于胖胖的客户端问题(servlet+vb)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.print类docflavor的类成员方法:客户端格式化打印数据定义及介绍
  • 客户端程序与容器打交道时客户端用什么程序编写?比如银行添单。
  • php实现socket实现客户端和服务端数据通信源代码
  • 客户端访问的时候,怎么样取得客户的IP地址?
  • windows 7下打开或者关闭telnet客户端/服务端命令方法操作步骤
  • linux 能ping通客户端ip,但ping不通客户端的域名。
  • andriod下java socket网络编程:java socket客户端服务端代码示例
  • 在单位用windows客户机可在ie设置代理上网,但linux客户机不行
  • Linux c socket编程:简单的客户端(client)和服务端(server)实现
  • 对于用客户端上网的用户(客户端不支持linux)如何在linux下上网?
  • 我想做一个添加,修改,删除,查询客户信息的程序,客户信息有姓名,性别,电话,工作单位等哪位大哥哥可以帮我一下给我一个例子,我现在
  • 请问:我发现send函数会使客户端退出, 这怎么办啊,怎样让它不使客户端退出啊,这样我就能重新连上了啊?
  • 求救:j2ee的构架下,可以作为一个客户端不断的往一用vc做的应用程序客户端发数据吗?
  • 信为客户关系管理软件 SinoCRM
  • jsp如何实现往客户端写数据文件
  • 可以在客户端存储文件吗?
  • SSH客户端 MindTerm
  • 我用resin+jsp做,希望客户端之间互传文件,如何实现
  • 客户关系管理系统 SugarCRM
  • ejb中怎么返回给客户一个对象?
  • Linux网络编程(怎样实现两个客户端之间的通信)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3