第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

請問在網(wǎng)絡(luò)編程中select函數(shù)如何接受一個(gè)accept事件?

請問在網(wǎng)絡(luò)編程中select函數(shù)如何接受一個(gè)accept事件?

一只甜甜圈 2019-09-20 15:14:25
網(wǎng)絡(luò)編程中select函數(shù)如何接受一個(gè)accept事件
查看完整描述

3 回答

?
慕無忌1623718

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊

#include <winsock.h>

#include <stdio.h>

#define PORT       5150 //端口

#define MSGSIZE    1024 //信息大小

#pragma comment(lib, "ws2_32.lib")

int    g_iTotalConn = 0; //連接數(shù)量

SOCKET g_CliSocketArr[FD_SETSIZE]; //套接字?jǐn)?shù)組

DWORD WINAPI WorkerThread(LPVOID lpParameter);//線程函數(shù)

int main()

{

  WSADATA     wsaData;

  SOCKET      sListen, sClient;

  SOCKADDR_IN local, client;

  int         iaddrSize = sizeof(SOCKADDR_IN);

  DWORD       dwThreadId;

  // Initialize Windows socket library

  //裝載套接字庫

  WSAStartup(0x0202, &wsaData);

  // Create listening socket

  //創(chuàng)建套接字

  sListen = socket(AF_INETSOCK_STREAMIPPROTO_TCP);

  // Bind

  //綁定

  local.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

  local.sin_family = AF_INET;

  local.sin_port = htons(PORT);

  bind(sListen, (struct sockaddr *)&local, sizeof(SOCKADDR_IN));

  // Listen

  //監(jiān)聽

  listen(sListen, 3);

  // Create worker thread

  //創(chuàng)建線程

  CreateThread(NULL, 0, WorkerThread, NULL, 0, &dwThreadId); 

 

  while (TRUE)

  {

    // Accept a connection

    //接受一個(gè)連接,返回的是客戶套的套接字

    sClient = accept(sListen, (struct sockaddr *)&client, &iaddrSize);

    //這里client的SOCKADDR_IN  client 中可以取出IP

    printf("Accepted client:%s:%d\n", inet_ntoa(client.sin_addr), ntohs(client.sin_port));

    // Add socket to g_CliSocketArr

    //把客戶端套接字放入數(shù)組中

    g_CliSocketArr[g_iTotalConn++] = sClient;

  }

  

  return 0;

}


DWORD WINAPI WorkerThread(LPVOID lpParam)//線程

{

  int            i;

  fd_set         fdread;//結(jié)構(gòu)

  int            ret;

  struct timeval tv = {1, 0};//超時(shí)時(shí)間 SELECT模型中用到的這里是1秒

  char           szMessage[MSGSIZE];//信息數(shù)組,事實(shí)上就是個(gè)緩沖區(qū)

  

  while (TRUE)

  {

   

    FD_ZERO(&fdread);//清空fd_set結(jié)構(gòu)

    for (i = 0; i < g_iTotalConn; i++)

    {

      FD_SET(g_CliSocketArr[i], &fdread);//把客戶套接字放到SELECT要求的數(shù)組中

    }

    //**************************************

    // We only care read event

    //只關(guān)心讀的情況

    ret = select(0, &fdread, NULL, NULL, &tv);

    if (ret == 0)

    {

      // Time expired 超時(shí)

      continue;

    }

    //如果SELECT返回不是0

    for (i = 0; i < g_iTotalConn; i++)

    {

      if (FD_ISSET(g_CliSocketArr[i], &fdread))

      {

        // A read event happened on g_CliSocketArr[i]

        //一個(gè)可讀發(fā)生在這個(gè)套接字上

        ret = recv(g_CliSocketArr[i], szMessage, MSGSIZE, 0);

        //把它讀出到緩沖區(qū)

      if (ret == 0 || (ret == SOCKET_ERROR && WSAGetLastError() == WSAECONNRESET))

      {

      // Client socket closed

      //客戶端關(guān)閉

          printf("Client socket %d closed.\n", g_CliSocketArr[i]);

         closesocket(g_CliSocketArr[i]);//關(guān)閉這個(gè)套接字

     

        if (i < g_iTotalConn - 1)

            { 

              //將數(shù)組中最后一個(gè)套接字挪到當(dāng)前的位置上           

              g_CliSocketArr[i--] = g_CliSocketArr[--g_iTotalConn];

            }

        }

      else

       {

       // We received a message from client

       //如果以上沒發(fā)生,那么就接收到一個(gè)客戶端的信息

          szMessage[ret] = '\0';

        //直接回送回去

          send(g_CliSocketArr[i], szMessage, strlen(szMessage), 0);

         }

       }

     }

  }

  

  return 0;

}

1





查看完整回答
反對(duì) 回復(fù) 2019-09-22
?
四季花海

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊

怎么在VS2005里面調(diào)試socket函數(shù)
一個(gè)VS2005 無法調(diào)試C++的問題
現(xiàn)象:在vs2005 中,建立一個(gè)空項(xiàng)目,添加一個(gè)c++文件main.cpp
#include iostream
using namespace std;int main(){cout hello ;}此時(shí)按f5 啟動(dòng)調(diào)試,即會(huì)提示項(xiàng)目無法調(diào)試:無法找到“xxx.exe”的調(diào)試信息,或者調(diào)試
信息不匹配。未使用調(diào)試信息生成二進(jìn)制文件。
搜了一些資料,都說建立項(xiàng)目的時(shí)候不應(yīng)建立空項(xiàng)目,而應(yīng)當(dāng)建立一個(gè)console application。
人寫到。 其實(shí)問題在于,在空項(xiàng)目中不生成調(diào)試文件pdb,所以無法調(diào)試。
要讓項(xiàng)目生成pdb 文件,需要更改:
項(xiàng)目屬性,configuration properties- linker- Generate Debug Info 從 no 改為 yes
但這樣還是不夠的,還需要更改:


查看完整回答
反對(duì) 回復(fù) 2019-09-22
  • 3 回答
  • 0 關(guān)注
  • 608 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)