请教个socket连接状态的问题

时间:2022-04-18 17:23:33
标题可能描述有问题

意思就是: 服务器端 需要判断连接客户端连接,

当一个客户端第一次发数据到服务器时,服务器端需要给客户端一个握手协议,此后,该客户端再次与服务器端通信时,不需要再握手,如正常SOCKET通信,收发就可以了...

依次类推,
以后的每个客户端与服务器做SOCKT通信前,都需要服务器端先建立握手动作,然后再相互做socket通信

当,某个客户端断开连接后,再次与服务器连接时,就像第一次连接服务器一样,需要先握手

服务器端如何处理,比较合适?

6 个解决方案

#1


握手动作又不让你去做,tcp底层自己做了

#2


心跳监控连接状态, 即可,

#3


发送心跳包就可以吧

#4


NONO ,
可能是我描述不清楚

HTML5服务器,,第一次客户端连接时,需要一次握手协议,,当该客户端再发数据来时,与服务器不用再握手
当作普通SOCKET处理


#5


下面是服务器接受函数的一段代码
 如果是某个客户端第一次连接服务器,则建立握手先,以后,该连接除非重新连接服务器再,则不需要握手动作,做普通SOCKET通信

 但是,下面代码作判断时,服务器只能与一个客户端建立连接,其他客户端就不能再连接上了,服务建立握手...

 当多个客户端存在时,如何判断每一个客户端是否是第一次与服务器连接,以便建立握手?

len = recv(fd, ev->buff, sizeof(ev->buff), 0); 
    printf("---------------------\n");
    printf("recv data len: %d\n",len);
    printf("---------------------\n");
    printf("recv data content: %s\n",ev->buff);
    printf("\n");
    if(len<480){
     printf("recv data content:\n");
     for(i=0;i<len;i++)
     printf("%02x ",ev->buff[i]);
     }    
    
    if(0==connected)// 第一次连接
  {
    printf("read:%d\n%s\n",len,ev->buff);
    secWebSocketKey=computeAcceptKey(ev->buff);
    shakeHand(fd,secWebSocketKey);
    connected=1;
    printf("22222    connected is :%d \n",connected);
    }

   dosomething();
}

 

#6


每一个连接进入时,如果server允许建立并连接后,记录client的地址。

然后对client进行比对判断,是否是以前已经连接过的。

而5楼的code中,connected对所有的client,不区分不同的client。

#1


握手动作又不让你去做,tcp底层自己做了

#2


心跳监控连接状态, 即可,

#3


发送心跳包就可以吧

#4


NONO ,
可能是我描述不清楚

HTML5服务器,,第一次客户端连接时,需要一次握手协议,,当该客户端再发数据来时,与服务器不用再握手
当作普通SOCKET处理


#5


下面是服务器接受函数的一段代码
 如果是某个客户端第一次连接服务器,则建立握手先,以后,该连接除非重新连接服务器再,则不需要握手动作,做普通SOCKET通信

 但是,下面代码作判断时,服务器只能与一个客户端建立连接,其他客户端就不能再连接上了,服务建立握手...

 当多个客户端存在时,如何判断每一个客户端是否是第一次与服务器连接,以便建立握手?

len = recv(fd, ev->buff, sizeof(ev->buff), 0); 
    printf("---------------------\n");
    printf("recv data len: %d\n",len);
    printf("---------------------\n");
    printf("recv data content: %s\n",ev->buff);
    printf("\n");
    if(len<480){
     printf("recv data content:\n");
     for(i=0;i<len;i++)
     printf("%02x ",ev->buff[i]);
     }    
    
    if(0==connected)// 第一次连接
  {
    printf("read:%d\n%s\n",len,ev->buff);
    secWebSocketKey=computeAcceptKey(ev->buff);
    shakeHand(fd,secWebSocketKey);
    connected=1;
    printf("22222    connected is :%d \n",connected);
    }

   dosomething();
}

 

#6


每一个连接进入时,如果server允许建立并连接后,记录client的地址。

然后对client进行比对判断,是否是以前已经连接过的。

而5楼的code中,connected对所有的client,不区分不同的client。