首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

winsocket有兴趣的 ,挑战一上

2012-09-04 
winsocket有兴趣的 ,挑战一下啊C/C++ code基于select模式的 一个工作线程主线程在接受客户端的连接,工作线

winsocket有兴趣的 ,挑战一下啊

C/C++ code
基于select模式的 一个工作线程主线程在接受客户端的连接,工作线程在处理数据能否在这基础上实现一个功能:有客户端连接后,就接受数据,然后 写到磁盘中,注:保存磁盘有讲究, 文件名必须是1001,1002,1003,以此类推。     CreateThread(NULL, 0, WorkerThread, NULL, 0, &dwThreadId);              while (TRUE)            {               // Accept a connection                  sClient = accept(sListen, (struct sockaddr *)&client, &iaddrSize);                  printf("Accepted client:%s:%d\n", inet_ntoa(client.sin_addr), ntohs(client.sin_port));                  // Add socket to g_CliSocketArr                  g_CliSocketArr[g_iTotalConn++] = sClient;            }          DWORD WINAPI WorkerThread(LPVOID lpParam)      {            int             i;            fd_set         fdread;            int             ret;            struct timeval tv = {1, 0};            char           szMessage[MSGSIZE];              while (TRUE)            {                  FD_ZERO(&fdread);                  for (i = 0; i < g_iTotalConn; i++)              {                  FD_SET(g_CliSocketArr[i], &fdread);              }                     // We only care read event              ret = select(0, &fdread, NULL, NULL, &tv);              if (ret == 0)              {       // Time expired                  continue;              }              for (i = 0; i < g_iTotalConn; i++)              {                  if (FD_ISSET(g_CliSocketArr, &fdread))                    {         // A read event happened on g_CliSocketArr                        ret = recv(g_CliSocketArr, szMessage, MSGSIZE, 0);                        if (ret == 0 || (ret == SOCKET_ERROR && WSAGetLastError() == WSAECONNRESET))                          {                              // Client socket closed                                        printf("Client socket %d closed.\n", g_CliSocketArr);                              closesocket(g_CliSocketArr);                              if (i < g_iTotalConn - 1)                              {                                  g_CliSocketArr[i--] = g_CliSocketArr[--g_iTotalConn];                              }                          }                          else                          {                                // We received a message from client                                szMessage[ret] = '\0';                                send(g_CliSocketArr[i], szMessage, strlen(szMessage), 0);                          }                    } //if              }//for          }//while              return 0;      } 




[解决办法]
没同步!

热点排行