日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁(yè)編程開發(fā)C#.NET → Socket Server連接客服端的簡(jiǎn)單實(shí)現(xiàn)

      Socket Server連接客服端的簡(jiǎn)單實(shí)現(xiàn)

      相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:本站整理時(shí)間:2010/9/12 21:54:41字體大。A-A+

      作者:佚名點(diǎn)擊:922次評(píng)論:0次標(biāo)簽: Socket 客服端

      • 類型:服務(wù)器區(qū)大小:21KB語(yǔ)言:中文 評(píng)分:6.6
      • 標(biāo)簽:
      立即下載
      2 頁(yè) 對(duì)Socket的封裝
      二、對(duì)Socket的封裝
      Socket的調(diào)用主要包含以下的步驟:

      調(diào)用比較復(fù)雜,我們首先區(qū)分兩類Socket,一類是Listening Socket,一類是Connected Socket.

      Listening Socket由MySocketServer負(fù)責(zé),一旦accept,則生成一個(gè)Connected Socket,又MySocket負(fù)責(zé)。

      MySocket主要實(shí)現(xiàn)的方法如下:

      int MySocket::write(const char * buf, int length)
      {
      int ret = 0;
      int left = length;
      int index = 0;
      while(left > 0)
      {
      ret = send(m_socket, buf + index, left, 0);
      if(ret == 0)
      break;
      else if(ret == -1)
      {
      break;
      }
      left -= ret;
      index += ret;
      }
      if(left > 0)
      return -1;
      return 0;
      }

      int MySocket::read(char * buf, int length)
      {
      int ret = 0;
      int left = length;
      int index = 0;
      while(left > 0)
      {
      ret = recv(m_socket, buf + index, left, 0);
      if(ret == 0)
      break;
      else if(ret == -1)
      return -1;
      left -= ret;
      index += ret;
      }

      return index;
      }

      int MySocket::status()
      {
      int status;
      int ret;
      fd_set checkset;
      struct timeval timeout;

      FD_ZERO(&checkset);
      FD_SET(m_socket, &checkset);

      timeout.tv_sec = 10;
      timeout.tv_usec = 0;

      status = select((int)m_socket + 1, &checkset, 0, 0, &timeout);
      if(status < 0)
      ret = -1;
      else if(status == 0)
      ret = 0;
      else
      ret = 0;
      return ret;
      }

      int MySocket::close()
      {
      struct linger lin;
      lin.l_onoff = 1;
      lin.l_linger = 0;
      setsockopt(m_socket, SOL_SOCKET, SO_LINGER, (const char *)&lin, sizeof(lin));
      ::close(m_socket);
      return 0;
      }
       

      MySocketServer的主要方法實(shí)現(xiàn)如下:

      int MySocketServer::init(int port)
      {
      if((m_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1)
      {
      return -1;
      }

      struct sockaddr_in serverAddr;
      memset(&serverAddr, 0, sizeof(struct sockaddr_in));
      serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
      serverAddr.sin_family = AF_INET;
      serverAddr.sin_port = htons(port);

      if(bind(m_socket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) == -1)
      {
      ::close(m_socket);
      return -1;
      }

      if(listen(m_socket, SOMAXCONN) == -1)
      {
      ::close(m_socket);
      return -1;
      }

      struct linger lin;
      lin.l_onoff = 1;
      lin.l_linger = 0;

      setsockopt(m_socket, SOL_SOCKET, SO_LINGER, (const char *)&lin, sizeof(lin));
      m_port = port;
      m_inited = true;
      return 0;
      }

      MySocket * MySocketServer::accept()
      {
      int sock;
      struct sockaddr_in clientAddr;
      socklen_t clientAddrSize = sizeof(clientAddr);
      if((sock = ::accept(m_socket, (struct sockaddr *)&clientAddr, &clientAddrSize)) == -1)
      {
      return NULL;
      }
      MySocket* socket = new MySocket(sock);
      return socket;
      }

      MySocket * MySocketServer::accept(int timeout)
      {
      struct timeval timeout;
      timeout.tv_sec = timeout;
      timeout.tv_usec = 0;

      fd_set checkset;
      FD_ZERO(&checkset);
      FD_SET(m_socket, &checkset);

      int status = (int)select((int)(m_socket + 1), &checkset, NULL, NULL, &timeout);
      if(status < 0)
      return NULL;
      else if(status == 0)
      return NULL;

      if(FD_ISSET(m_socket, &checkset))
      {
      return accept();
      }
      }
       

        相關(guān)評(píng)論

        閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過(guò)難過(guò)
        • 5 囧
        • 3 圍觀圍觀
        • 2 無(wú)聊無(wú)聊

        熱門評(píng)論

        最新評(píng)論

        發(fā)表評(píng)論 查看所有評(píng)論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)