欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

c語言socket多線程編程限制客戶端連接數(shù)

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點擊: 次

先上一些多線程需要使用的函數(shù)定義:

復(fù)制代碼 代碼如下:

DWORD WINAPI ProcessClientRequests(LPVOID lpParam)  //新線程將會執(zhí)行的函數(shù)定義
{
      return 0;
}

HANDLE handler=CreateThread(NULL, 0, ProcessClientRequests, &clientsocket, 0, NULL);   //這里比較簡單,&clientsocket是個指針,是從主線程傳入新線程的參數(shù)


WaitForMultipleObjects(MAXCLIENTS, threads, TRUE, INFINITE);  //用來阻塞主線程,直到所有創(chuàng)建的子線程都完成任務(wù)為止,才繼續(xù)執(zhí)行后面的代碼

for(int i=0;i<MAXCLIENTS; i++)
{
    CloseHandle(threads[i]);       //創(chuàng)建的每個子線程的HANDLE都會被保存在HANDLE數(shù)組中,這個函數(shù)用于關(guān)閉各個handle所對應(yīng)的線程空間
}

服務(wù)器端程序

主線程代碼如下:

復(fù)制代碼 代碼如下:

#define MAXCLIENTS 3           //宏定義,最多3個客戶端連接

int main()
{
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2, 2), &wsaData);
    HANDLE threads[MAXCLIENTS];

    SOCKET s=socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

    sockaddr_in sockaddr;
    sockaddr.sin_family=PF_INET;
    sockaddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
    sockaddr.sin_port=htons(9000);
    bind(s, (SOCKADDR*)&sockaddr, sizeof(SOCKADDR));

    listen(s, 1);

    printf("listening on port [%d].\n", 9000);

    int existingClientCount=0;
    while(TRUE)
    {
        SOCKADDR clientAddr;
        int size=sizeof(SOCKADDR);

        SOCKET clientsocket;
        clientsocket=accept(s, &clientAddr, &size);
        printf("***SYS***    New client touched.\n");

        if(existingClientCount<MAXCLIENTS)       //判斷是否已經(jīng)超出最大連接數(shù)了
        {
            threads[existingClientCount++]=CreateThread(NULL, 0, ProcessClientRequests, &clientsocket, 0, NULL);  //啟動新線程,并且將socket傳入
        }
        else
        {
            char* msg="Exceeded Max incoming requests, will refused this connect!\r\n";
            send(clientsocket, msg, strlen(msg)+sizeof(char), NULL);       //發(fā)送拒絕連接消息給客戶端
            printf("***SYS***    REFUSED.\n");
            closesocket(clientsocket);                                     //釋放資源
            break;
        }
    }

    printf("Maximize clients occurred for d%.\r\n", MAXCLIENTS);

    WaitForMultipleObjects(MAXCLIENTS, threads, TRUE, INFINITE);           //等待所有子線程,直到完成為止

    closesocket(s);
    for(int i=0;i<MAXCLIENTS; i++)
    {
        CloseHandle(threads[i]);                                           //清理線程資源
    }

    WSACleanup();

    printf("Cleared all.\r\n");

    getchar();

    exit(0);
}

子線程函數(shù)定義

復(fù)制代碼 代碼如下:

DWORD WINAPI ProcessClientRequests(LPVOID lpParam)
{
    SOCKET* clientsocket=(SOCKET*)lpParam;  //這里需要強制轉(zhuǎn)換,注意:指針類型的

    char* msg="Hello, my client.\r\n";
    send(*clientsocket, msg, strlen(msg)+sizeof(char), NULL);
    printf("***SYS***    HELLO.\n");

    while(TRUE)
    {
        char buffer[MAXBYTE]={0};
        recv(*clientsocket, buffer, MAXBYTE, NULL);
        if(strcmp(buffer, "exit")==0)
        {
            char* msg_bye="Bye.\r\n";
            send(*clientsocket, msg_bye, strlen(msg_bye)+sizeof(char), NULL);
            break;
        }
        printf("***Client***    %s\n", buffer);
    }

    closesocket(*clientsocket);

    return 0;
}



上一篇:C++獲取文件哈希值(hash)和獲取torrent(bt種子)磁力鏈接哈希值

欄    目:C語言

下一篇:c語言判斷是否素數(shù)程序代碼

本文標(biāo)題:c語言socket多線程編程限制客戶端連接數(shù)

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/3879.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有