国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

《TCP/IP網(wǎng)絡(luò)編程》閱讀筆記--基于Windows實現(xiàn)Hello Word服務(wù)器端和客戶端

這篇具有很好參考價值的文章主要介紹了《TCP/IP網(wǎng)絡(luò)編程》閱讀筆記--基于Windows實現(xiàn)Hello Word服務(wù)器端和客戶端。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1--Hello Word服務(wù)器端

2--客戶端

3--編譯運行

3-1--編譯服務(wù)器端

3-2--編譯客戶端

3-3--運行


1--Hello Word服務(wù)器端

// gcc hello_server_win.c -o hello_server_win -lwsock32
// hello_server_win 9190
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>

// 打印錯誤信息
void ErrorHandling(char* message){
    fputs(message, stderr);
    fputc('\n', stderr);
    exit(1);
}

int main(int argc, char* argv[]){
    WSADATA wsaData;
    SOCKET hServSock, hClntSock;
    SOCKADDR_IN servAddr, clntAddr;
    
    int szClntAddr;
    char message[] = "Hello World!";
    if(argc != 2){
        printf("Usage: %s <port>\n", argv[0]);
        exit(1);
    }

    if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0){ // 初始化套接字庫
        ErrorHandling("WSAStartup() error!");
    }

    hServSock = socket(PF_INET, SOCK_STREAM, 0); // 創(chuàng)捷socket
    if(hServSock == INVALID_SOCKET){
        ErrorHandling("socket() error!");
    }

    memset(&servAddr, 0, sizeof(servAddr));
    servAddr.sin_family = AF_INET;
    servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
    servAddr.sin_port = htons(atoi(argv[1])); // 端口

    if(bind(hServSock, (SOCKADDR*) &servAddr, sizeof(servAddr)) == SOCKET_ERROR){ // 給 socket 分配 ip 地址和端口號
        ErrorHandling("bind() error!");
    }

    if(listen(hServSock, 5) == SOCKET_ERROR){ // 置于listen狀態(tài),使socket可接收客戶端連接請求
        ErrorHandling("listen() error!");
    }

    szClntAddr = sizeof(clntAddr);
    hClntSock = accept(hServSock, (SOCKADDR*)&clntAddr, &szClntAddr); // 使socket受理客戶端的連接請求
    if(hClntSock == INVALID_SOCKET){
        ErrorHandling("accept() error!");
    }

    send(hClntSock, message, sizeof(message), 0); // 向連接的客戶端發(fā)送數(shù)據(jù)
    closesocket(hClntSock);
    closesocket(hServSock);
    WSACleanup(); // 注銷初始化的套接字庫
    return 0;
}

2--客戶端

// gcc hello_client_win.c -o hello_client_win -lwsock32
// hello_client_win 127.0.0.1 9190
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>

// 打印錯誤信息
void ErrorHandling(char* message){
    fputs(message, stderr);
    fputc('\n', stderr);
    exit(1);
}

int main(int argc, char* argv[]){
    WSADATA wsaData;
    SOCKET hSocket;
    SOCKADDR_IN servAddr;

    char message[30];
    int strLen;
    if(argc != 3){
        printf("Usage: %s <IP> <port>\n", argv[0]);
        exit(1);
    }

    if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0){ // 初始化套接字庫
        ErrorHandling("WSAStartup() error!"); 
    }

    hSocket = socket(PF_INET, SOCK_STREAM, 0); // 創(chuàng)捷socket
    if(hSocket == INVALID_SOCKET){
        ErrorHandling("socket() error!");
    }

    memset(&servAddr, 0, sizeof(servAddr));
    servAddr.sin_family = AF_INET;
    servAddr.sin_addr.s_addr = inet_addr(argv[1]);
    servAddr.sin_port = htons(atoi(argv[2]));

    if(connect(hSocket, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR){ // 向服務(wù)器端發(fā)送連接請求
        ErrorHandling("connect() error!");
    }

    strLen = recv(hSocket, message, sizeof(message) - 1, 0); // 接收服務(wù)器發(fā)來的數(shù)據(jù)
    if(strLen == -1){
        ErrorHandling("read() error!");
    }
    printf("Message from server: %s \n", message); 

    closesocket(hSocket);
    WSACleanup(); // 注銷初始化的Winsock庫
    return 0;
}

3--編譯運行

3-1--編譯服務(wù)器端

gcc hello_server_win.c -o hello_server_win -lwsock32

3-2--編譯客戶端

gcc hello_client_win.c -o hello_client_win -lwsock32

3-3--運行

# 運行服務(wù)器端
hello_server_win 9190

# 運行客戶端
hello_client_win 127.0.0.1 9190

運行結(jié)果:

《TCP/IP網(wǎng)絡(luò)編程》閱讀筆記--基于Windows實現(xiàn)Hello Word服務(wù)器端和客戶端,網(wǎng)絡(luò)編程筆記,tcp/ip,網(wǎng)絡(luò)編程文章來源地址http://www.zghlxwxcb.cn/news/detail-696031.html

到了這里,關(guān)于《TCP/IP網(wǎng)絡(luò)編程》閱讀筆記--基于Windows實現(xiàn)Hello Word服務(wù)器端和客戶端的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 《TCP/IP網(wǎng)絡(luò)編程》閱讀筆記--多播與廣播

    《TCP/IP網(wǎng)絡(luò)編程》閱讀筆記--多播與廣播

    目錄 1--多播 2--多播代碼實例 3--廣播 4--廣播代碼實例 ????????多播方式的數(shù)據(jù)傳輸是基于 UDP 完成的,多播數(shù)據(jù)包的格式與 UDP 數(shù)據(jù)包相同; ? ? ? ? 多播與 UDP 的區(qū)別:UDP 數(shù)據(jù)傳輸以單一目標進行,多播數(shù)據(jù)同時傳遞到加入(注冊)特定組的大量主機; 多播的數(shù)據(jù)傳輸

    2024年02月07日
    瀏覽(25)
  • 《TCP/IP網(wǎng)絡(luò)編程》閱讀筆記--并發(fā)多進程服務(wù)端的使用

    《TCP/IP網(wǎng)絡(luò)編程》閱讀筆記--并發(fā)多進程服務(wù)端的使用

    目錄 1--并發(fā)服務(wù)器端 2--進程 2-1--進程的相關(guān)概念 2-2--fork()創(chuàng)建進程 2-3--僵尸進程 2-4--wait()和waitpid()銷毀僵尸進程 3--信號處理 3-1--signal()函數(shù) 3-2--sigaction()函數(shù) 3--3--利用信號處理技術(shù)消滅僵尸進程 4--基于多任務(wù)的并發(fā)服務(wù)器 5--分割 TCP 的 I/O 程序 并發(fā)服務(wù)器端主要有以下三類

    2024年02月09日
    瀏覽(21)
  • 《TCP/IP網(wǎng)絡(luò)編程》閱讀筆記--Timewait狀態(tài)和Nagle算法

    《TCP/IP網(wǎng)絡(luò)編程》閱讀筆記--Timewait狀態(tài)和Nagle算法

    ? ? ? ? 對于服務(wù)器端/客戶端,當一端結(jié)束連接時,會向另一端發(fā)送 FIN 消息;兩端的在經(jīng)過四次揮手過程后,其 Socket 不會馬上消除,而是會處于一個 Time-wait 狀態(tài)的階段,此時 Socket 擁有的 端口號并沒有得到釋放 ,因此 不能使用相同的端口號 ; ? ? ? ? 只有先斷開連接

    2024年02月09日
    瀏覽(34)
  • 《TCP/IP網(wǎng)絡(luò)編程》閱讀筆記--getsockopt和setsockopt的使用

    《TCP/IP網(wǎng)絡(luò)編程》閱讀筆記--getsockopt和setsockopt的使用

    目錄 1--Socket的多種可選項 2--getsocketopt() 3--setsockopt() 4--代碼實例 ? ? ? ? Socket 擁有多種可選項,其可分為 SOL_SOCKET 層,IPPROTO_IP 層和IPPROTO_TCP 層等,一般通過 getsocketopt() 和 setsockopt() 函數(shù)進行獲取和設(shè)置; ① 基于? getsockopt() 函數(shù),利用設(shè)置協(xié)議層為 SOL_SOCKET 和 SO_TYPE 可選項

    2024年02月09日
    瀏覽(47)
  • TCP/IP網(wǎng)絡(luò)編程 第十九章:Windows平臺下線程的使用

    要想掌握Windows平臺下的線程,應(yīng)首先理解“內(nèi)核對象”(Kernel Objects)的概念。如果僅介紹Windows平臺下的線程使用技巧,則可以省略相對陌生的內(nèi)核對象相關(guān)內(nèi)容。但這并不能使各位深入理解Windows平臺下的線程。 內(nèi)核對象的定義 操作系統(tǒng)創(chuàng)建的資源有很多種,如進程、線程

    2024年02月16日
    瀏覽(30)
  • Linux 網(wǎng)絡(luò)編程學(xué)習(xí)筆記——一、TCP/IP 協(xié)議族

    Linux 網(wǎng)絡(luò)編程學(xué)習(xí)筆記——一、TCP/IP 協(xié)議族

    數(shù)據(jù)鏈路層實現(xiàn)了網(wǎng)卡接口的網(wǎng)絡(luò)驅(qū)動程序,以處理數(shù)據(jù)在物理媒介(以太網(wǎng)、令牌環(huán)等)上的傳輸,不同的物理網(wǎng)絡(luò)具有不同的電氣特性,網(wǎng)絡(luò)驅(qū)動程序隱藏了這些細節(jié),為上層協(xié)議提供一個統(tǒng)一的接口。最常用的協(xié)議是 ARP(Address Resolve Protocol,地址解析協(xié)議)和 RARP(

    2024年02月02日
    瀏覽(40)
  • 網(wǎng)絡(luò)編程day2——基于TCP/IP協(xié)議的網(wǎng)絡(luò)通信

    ? ? ? ? 計算機S ? ? ? ? ? ? ? ? ? ? ? ? ????????????????????????計算機C ? ? ?創(chuàng)建socket對象 ? ? ? ? ? ? ? ? ????????????????? 創(chuàng)建socket對象 ? ? ?準備通信地址(自己的ip(非公網(wǎng)ip))? ? ? 準備通信地址 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (計算

    2024年02月10日
    瀏覽(40)
  • 《TCP/IP網(wǎng)絡(luò)編程》--基于TCP實現(xiàn)字符串對話和文件傳輸

    主要需求: ? ? ? ? 服務(wù)器端和客戶端各傳遞 1 次字符串,基于 TCP 協(xié)議,傳遞字符串前先以 4 字節(jié)整數(shù)型方式傳遞字符串長度,剩余部分為字符串數(shù)據(jù); 注:下面的代碼基于 Windows 系統(tǒng)實現(xiàn); 項目鏈接:Chapter5

    2024年02月09日
    瀏覽(28)
  • TCP IP網(wǎng)絡(luò)編程(四) 基于TCP的服務(wù)器端、客戶端

    TCP IP網(wǎng)絡(luò)編程(四) 基于TCP的服務(wù)器端、客戶端

    TCP/IP協(xié)議棧 ? TCP/IP協(xié)議棧 TCP/IP協(xié)議棧共分為4層,可以理解為數(shù)據(jù)收發(fā)分成了4個層次化過程。 ? TCP協(xié)議棧 ? UDP協(xié)議棧 鏈路層 鏈路層是物理連接領(lǐng)域標準化的結(jié)果,也是最基本的領(lǐng)域,專門定義LAN、WAN、MAN等網(wǎng)絡(luò)標準。兩臺主機通過網(wǎng)絡(luò)進行數(shù)據(jù)交換,這需要像下圖所示

    2024年01月16日
    瀏覽(18)
  • TCP/IP網(wǎng)絡(luò)編程(1)——基于TCP的服務(wù)端和客戶端的簡單實現(xiàn)

    目錄 前言 一、服務(wù)器端函數(shù) 1. 創(chuàng)建套接字函數(shù) socket 2. 套接字綁定地址函數(shù) bind 3. 等待連接請求函數(shù) listen 4. 處理連接請求函數(shù) accept 5. 關(guān)閉套接字函數(shù) close 二、客戶端函數(shù) 1. 請求連接函數(shù) connect 三、完整代碼 四、 基于TCP的半關(guān)閉 shutdown 五、 套接字可選項 getsockopt setsoc

    2024年02月07日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包