最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的聊天室功能

 更新時(shí)間:2021年06月30日 15:22:25   作者:Ywrby  
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的聊天室功能,供大家參考,具體內(nèi)容如下

服務(wù)器端

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<winsock.h>
#pragma comment(lib, "ws2_32.lib") 
#define L 256
int main() {
    char SendBuf[L];
    char ReceiveBuf[L];
    int SendLen;
    int ReceiveLen;
    int Length;
 
    SOCKET socket_server;
    SOCKET socket_receive;
 
    SOCKADDR_IN ServerAdd;
    SOCKADDR_IN ClientAdd;
    WORD wVR;
    WSADATA WsaData;
    int error;
 
 
    //++++++++++++++++++++++++++++++++++++++++++++++++
    wVR = MAKEWORD(2, 2);
    error = WSAStartup(wVR, &WsaData);
    if (error != 0) {
        printf("加載套接字失??!");
        return 0;
    }
    if (LOBYTE(WsaData.wVersion) != 2 || HIBYTE(WsaData.wVersion) != 2) {
        printf("版本不符!");
        WSACleanup();
        return 0;
    }
    //++++++++++++++++++++++++++++++++++++++++++++++++
    ServerAdd.sin_family = AF_INET;
    ServerAdd.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
    ServerAdd.sin_port = htons(5000);
    //++++++++++++++++++++++++++++++++++++++++++++++++
    socket_server = socket(AF_INET, SOCK_STREAM, 0);
    //++++++++++++++++++++++++++++++++++++++++++++++++
    if (bind(socket_server, (SOCKADDR*)&ServerAdd, sizeof(SOCKADDR)) == SOCKET_ERROR) {
        printf("綁定失??!\n");
    }
    //++++++++++++++++++++++++++++++++++++++++++++++++
    if (listen(socket_server, 5) < 0) {
        printf("監(jiān)聽失敗!\n");
    }
    Length = sizeof(SOCKADDR);
    socket_receive = accept(socket_server, (SOCKADDR*)&ClientAdd, &Length);
    if (socket_receive == SOCKET_ERROR) {
        printf("接受連接失?。n");
    }
    while (1) {
        ReceiveLen = recv(socket_receive, ReceiveBuf, L, 0);
        if (ReceiveLen < 0) {
            printf("接受失敗\n程序退出!\n");
            break;
        }
        else {
            printf("client say:%s\n", ReceiveBuf);
        }
        //++++++++++++++++++++++++++++++++++++++++++++++++
        printf("please enter message:");
        scanf("%s", SendBuf);
        SendLen = send(socket_receive, SendBuf, L, 0);
        if (SendLen < 0) {
            printf("發(fā)送失敗\n");
        }
    }
    closesocket(socket_receive);
    closesocket(socket_server);
    return 0;
}

客戶端

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<winsock.h>
#pragma comment(lib, "ws2_32.lib") 
#define L 256
int main() {
    char SendBuf[L];
    char ReceiveBuf[L];
    int SendLen;
    int ReceiveLen;
    int Length;
 
    SOCKET socket_send;
 
    SOCKADDR_IN ServerAdd;
 
    WORD wVR;
    WSADATA WsaData;
    int error;
 
 
    //++++++++++++++++++++++++++++++++++++++++++++++++
    wVR = MAKEWORD(2, 2);
    error = WSAStartup(wVR, &WsaData);
    if (error != 0) {
        printf("加載套接字失??!");
        return 0;
    }
    if (LOBYTE(WsaData.wVersion) != 2 || HIBYTE(WsaData.wVersion) != 2) {
        printf("版本不符!");
        WSACleanup();
        return 0;
    }
    //++++++++++++++++++++++++++++++++++++++++++++++++
    ServerAdd.sin_family = AF_INET;
    ServerAdd.sin_addr.S_un.S_addr = inet_addr("192.168.190.1");
    ServerAdd.sin_port = htons(5000);
    //++++++++++++++++++++++++++++++++++++++++++++++++
 
    socket_send = socket(AF_INET, SOCK_STREAM, 0);
 
 
    if (connect(socket_send, (SOCKADDR*)&ServerAdd, sizeof(SOCKADDR)) == SOCKET_ERROR) {
        printf("連接失?。n");
    }
    //++++++++++++++++++++++++++++++++++++++++++++++++
    while (1) {
        printf("please enter message:");
        scanf("%s", SendBuf);
        SendLen = send(socket_send, SendBuf, L,0);
        if (SendLen < 0) {
            printf("發(fā)送失?。n");
        }
        //++++++++++++++++++++++++++++++++++++++++++++++++
        ReceiveLen = recv(socket_send, ReceiveBuf, L, 0);
        if (ReceiveLen < 0) {     
            printf("接受失?。n程序退出\n");
            break;
        }
        else {
            printf("Server say:%s\n", ReceiveBuf);
        }
    }
    closesocket(socket_send);
    WSACleanup();
    return 0;
 
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++改變編程入口為main函數(shù)

    C++改變編程入口為main函數(shù)

    這篇文章主要介紹了C++改變編程入口為main函數(shù)的方法的相關(guān)資料,需要的朋友可以參考下
    2015-06-06
  • C語(yǔ)言實(shí)現(xiàn)撲克牌計(jì)算24點(diǎn)

    C語(yǔ)言實(shí)現(xiàn)撲克牌計(jì)算24點(diǎn)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言如何實(shí)現(xiàn)撲克牌計(jì)算24點(diǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C++實(shí)現(xiàn)堆排序?qū)嵗榻B

    C++實(shí)現(xiàn)堆排序?qū)嵗榻B

    大家好,本篇文章主要講的是C++實(shí)現(xiàn)堆排序?qū)嵗榻B,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 淺談分詞器Tokenizer

    淺談分詞器Tokenizer

    分詞器的工作就是分解文本流成詞(tokens).在這個(gè)文本中,每一個(gè)token都是這些字符的一個(gè)子序列。一個(gè)分析器(analyzer)必須知道它所配置的字段,但是tokenizer不需要,分詞器(tokenizer)從一個(gè)字符流(reader)讀取數(shù)據(jù),生成一個(gè)Token對(duì)象(TokenStream)的序列
    2021-06-06
  • C++實(shí)現(xiàn)utf8字符串和gbk字符串互轉(zhuǎn)

    C++實(shí)現(xiàn)utf8字符串和gbk字符串互轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)utf8字符串和gbk字符串轉(zhuǎn)換的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • 詳解C++中的異常和錯(cuò)誤處理機(jī)制

    詳解C++中的異常和錯(cuò)誤處理機(jī)制

    在C++編程中,異常處理和錯(cuò)誤處理機(jī)制是非常重要的,它們可以幫助程序員有效地處理運(yùn)行時(shí)錯(cuò)誤和異常情況,本文就來(lái)介紹一下C++中的異常處理和錯(cuò)誤處理機(jī)制吧
    2023-05-05
  • C語(yǔ)言圖文并茂詳解鏈接過程

    C語(yǔ)言圖文并茂詳解鏈接過程

    首先來(lái)思考一個(gè)問題:工程中的每個(gè)C語(yǔ)言源文件被編譯后生成的目標(biāo)文件,這些目標(biāo)文件如何生成最終的可執(zhí)行程序? 這就需要這節(jié)我們將要分析的鏈接器
    2022-04-04
  • C++11中value category(值類別)及move semantics(移動(dòng)語(yǔ)義)的介紹

    C++11中value category(值類別)及move semantics(移動(dòng)語(yǔ)義)的介紹

    這篇文章主要給大家介紹了C++11中value category(值類別)及move semantics(移動(dòng)語(yǔ)義)的介紹,文中介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • 從頭學(xué)習(xí)C語(yǔ)言之switch語(yǔ)句和分支嵌套

    從頭學(xué)習(xí)C語(yǔ)言之switch語(yǔ)句和分支嵌套

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言之switch語(yǔ)句和分支嵌套,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • C++中vector迭代器失效問題的原因及解決方案

    C++中vector迭代器失效問題的原因及解決方案

    迭代器(iterator)是一種用于遍歷數(shù)據(jù)集合的的對(duì)象,它提供了一種訪問數(shù)據(jù)集合中元素的方式,而無(wú)需暴露數(shù)據(jù)集合內(nèi)部的細(xì)節(jié),使用迭代器,我們可以對(duì)數(shù)據(jù)集合中的每個(gè)元素進(jìn)行處理,本文介紹了C++中關(guān)于vector迭代器失效問題的原因及解決方案,需要的朋友可以參考下
    2024-09-09

最新評(píng)論

万盛区| 郑州市| 沅陵县| 浙江省| 尼玛县| 江安县| 额济纳旗| 卢氏县| 邻水| 盐源县| 隆安县| 永泰县| 钟祥市| 舒兰市| 疏附县| 册亨县| 丽江市| 邻水| 新余市| 郑州市| 邯郸县| 綦江县| 桂东县| 凤城市| 黔西县| 宁都县| 平罗县| 南宁市| 涞水县| 襄樊市| 皮山县| 宜城市| 仲巴县| 宣恩县| 姚安县| 肥乡县| 惠东县| 大荔县| 湘乡市| 聂荣县| 德令哈市|