做个聊天室的东西,请问需要为每个需要连接的客户端定义一个socket吗?
还是定义一个就可以解决所有客户端的连接?如果每个客户端需要为其定义一个socket,那上万的客户端的话不是需要上万个socket??

解决方案 »

  1.   

    看你用怎么实现了。
    用TCP学是UDP呢?
    TCP的话要很多个SOCKET
    UDP就不用了因为不用建立连接
      

  2.   

    TCP 但我看一个聊天室的程序他只用一个socket 很奇怪
      

  3.   

    不可能。如果TCP的话最起码两个SOCKET,一个用于listen,一个用于传输数据。
      

  4.   

    while( TRUE ) {
    if ( SOCKET_Select(pChatRoom->m_ListenSock, 100, TRUE) ) {
    sockaddr_in clientAddr;
    int iLen = sizeof(sockaddr_in);
    SOCKET accSock = accept(pChatRoom->m_ListenSock, (struct sockaddr *)&clientAddr , &iLen);
    if (accSock == INVALID_SOCKET) {
    continue;
    }
    //做一些其他操作……
    Sleep(100);
    }
    }你看 就一个pChatRoom->m_ListenSock 这个socket就accept所有客户端的连接,
    我不知道他一个客户端连接了之后 其他客户端怎么连接的。但我试过开几个客户端发信息都能收到
      

  5.   

    while( TRUE ) {
    if ( SOCKET_Select(pChatRoom->m_ListenSock, 100, TRUE) ) {
    sockaddr_in clientAddr;
    int iLen = sizeof(sockaddr_in);
    SOCKET accSock = accept(pChatRoom->m_ListenSock, (struct sockaddr *)&clientAddr , &iLen);
    if (accSock == INVALID_SOCKET) {
    continue;
    }
    //做一些其他操作……
    Sleep(100);
    }
    }
      

  6.   

    while( TRUE ) {
    if ( SOCKET_Select(pChatRoom->m_ListenSock, 100, TRUE) ) {
    sockaddr_in clientAddr;
    int iLen = sizeof(sockaddr_in);
    SOCKET accSock = accept(pChatRoom->m_ListenSock, (struct sockaddr *)&clientAddr , &iLen);
    if (accSock == INVALID_SOCKET) {
    continue;
    }
    //做一些其他操作……
    Sleep(100);
    }
    }
      

  7.   

      SOCKET accSock = accept(pChatRoom->m_ListenSock, (struct sockaddr *)&clientAddr , &iLen);
      

  8.   

      SOCKET accSock = accept(pChatRoom->m_ListenSock, (struct sockaddr *)&clientAddr , &iLen);
    每次连接都会创建一个SOCKET...