zoukankan      html  css  js  c++  java
  • 修改的select

    慢慢修改:

    #include <winsock.h>
    #include <stdio.h>
    
    #include <string>
    
    #define PORT       5010
    #define MSGSIZE    1024
    int BytesSum = 0;
    
    #pragma comment(lib, "ws2_32.lib")
    
    DWORD WINAPI WorkerThread(LPVOID lpParameter);
    
    void InitWinSocket() 
    {
        WSADATA     wsaData;
        WSAStartup(0x0202, &wsaData);
    }
    
    #define ListenQ 10
    
    int main()
    {
        InitWinSocket();
    
        SOCKET      lListenFD, lClientSocket[FD_SetSize];
        
        lListenFD = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    
        SOCKADDR_IN local, client;
    
        // Bind
        local.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
        local.sin_family = AF_INET;
        local.sin_port = htons(PORT);
    
        bind(lListenFD, (struct sockaddr *)&local, sizeof(SOCKADDR_IN));
    
        // Listen
        listen(lListenFD, ListenQ);
    
        int lTotalConn = 0;
        SOCKET lCliSocketArr[FD_SETSIZE];
        for (int i = 0; i < FD_SETSIZE; ++i)
        {
            lCliSocketArr[i] = -1;
        }
    
        int lMaxFD = lListenFD;
        int lMaxClientSocketIndex = -1;
    
        fd_set lAllSet;
        fd_set lReadySet;
        FD_ZERO(lAllSet);
        FD_SET(lListenFD, lAllSet);
    
        struct timeval tv = {1, 0};
    
        fd_set fdread;
        char szMessage[MSGSIZE];
        FD_ZERO(fdread);
    
        while (TRUE)
        {
            lReadySet = lAllSet;
            SOCKET lClient = select(lListenFD,lReadySet,NULL,NULL,&tv);
    
            if (FD_ISSET(lListenFD, lReadySet))
            {
                int lAddrSize = sizeof(client);
                lClientSocket = accept(lMaxFD+1, (sockaddr*)&client, &lAddrSize);
                printf("Accepted client:%s:%d
    ", inet_ntoa(client.sin_addr), ntohs(client.sin_port));
    
                // Add socket to g_CliSocketArr
                for (int i =0 ; i < FD_SETSIZE; ++i)
                {
                    if (lCliSocketArr[i] < 0)
                    {
                        lCliSocketArr[i] = lClientSocket;
                        break;
                    }
                }
                if (i == FD_SETSIZE)
                {
                    printf("too many client/n");
                }
                if (lClientSocket > lMaxFD)
                {
                    lMaxFD = lClientSocket;
                }
            }
    
            int ret = select(0, &fdread, NULL, NULL, &tv);//检测是否有数据可读
    
            if (ret == 0)
            {
                // Time expired
                continue;
            }
    
            for (i = 0; i < g_iTotalConn; i++)
            {
                memset(szMessage,0,MSGSIZE);
                if (FD_ISSET(g_CliSocketArr[i], &fdread))
                {
                    // A read event happened on g_CliSocketArr
                    ret = recv(g_CliSocketArr[i], szMessage, MSGSIZE, 0);
                    if (ret == 0 || (ret == SOCKET_ERROR && WSAGetLastError() == WSAECONNRESET))
                    {//处理发生错误的时候
                        // Client socket closed
                        printf("Client socket %d closed.
    ", g_CliSocketArr);
                        closesocket(g_CliSocketArr[i]);
                        if (i < g_iTotalConn - 1)
                        {            
                            g_CliSocketArr[i--] = g_CliSocketArr[--g_iTotalConn];
                        }
                    }
                    else
                    {
                        szMessage[ret] = '';
                        printf("BytesSum(%d) read Data:%s
    ",BytesSum, szMessage);
                        //send(g_CliSocketArr[i], szMessage, ret, 0);
                    }
                }
            }
    
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    Spring中的Bean相关问题
    请谈一下spring bean的生命周期
    请谈一谈IOC中的继承和Java中的继承有什么区别
    谈谈你对Spring IOC和DI的理解,以及它们的区别
    Spring中用到了哪些设计模式
    JAVA自学笔记11
    JAVA自学笔记14
    JAVA自学笔记12
    JAVA自学笔记15
    JAVA自学笔记18
  • 原文地址:https://www.cnblogs.com/xiangshancuizhu/p/3269332.html
Copyright © 2011-2022 走看看