首頁 > 後端開發 > C++ > 主體

C++ 函式在網路程式設計中如何處理網路協定?

WBOY
發布: 2024-04-27 12:06:01
原創
757 人瀏覽過

C 標準函式庫提供以下函數處理網路協定:socket(): 建立新的網路套接字描述符。 connect(): 將套接字連接到遠端位址和連接埠。 send()/recv(): 發送或接收資料包。 listen(): 在指定連接埠上偵聽傳入連線。 accept(): 接受傳入連線並建立新的套接字描述符。

C++ 函数在网络编程中如何处理网络协议?

C 函數在網路程式設計中處理網路協定

網路協定是控制電腦在網路上如何進行通訊的規則和約定集。 C 語言為開發網路應用程式提供了豐富的功能,包括用於處理網路協定的內建函數。

網路協定的C 函數

C 標準函式庫提供了以下函數來處理網路協定:

  • socket(): 建立新的網路套接字描述符。
  • connect(): 將套接字連接到遠端位址和連接埠。
  • send()/recv(): 傳送或接收封包。
  • listen(): 在指定連接埠上偵聽傳入連線。
  • accept(): 接受傳入連線並建立新的套接字描述符。

實戰案例:TCP 用戶端-伺服器

以下範例示範如何使用這些函數在C 應用程式中實作簡單的TCP 用戶端-伺服器協定:

// 客户端代码
#include <iostream>
#include <netdb.h>
#include <sys/socket.h>

int main() {
    struct sockaddr_in server_addr;
    memset(&server_addr, 0, sizeof(server_addr));

    // 获取服务器的地址和端口号
    char *host = "127.0.0.1";
    int port = 8080;

    // 创建套接字
    int sock = socket(AF_INET, SOCK_STREAM, 0);

    // 设置服务器地址
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = inet_addr(host);
    server_addr.sin_port = htons(port);

    // 连接到服务器
    connect(sock, (struct sockaddr *) &server_addr, sizeof(server_addr));

    // 发送数据到服务器
    std::string message = "Hello from client!";
    send(sock, message.c_str(), message.length(), 0);

    // 接收服务器的响应
    char buffer[1024];
    memset(buffer, 0, sizeof(buffer));
    recv(sock, buffer, sizeof(buffer), 0);

    // 输出服务器响应
    std::cout << "Received from server: " << buffer << std::endl;

    return 0;
}

// 服务器代码
#include <iostream>
#include <netdb.h>
#include <sys/socket.h>
#include <unistd.h>

int main() {
    struct sockaddr_in server_addr;
    memset(&server_addr, 0, sizeof(server_addr));

    // 设置服务器的地址和端口号
    char *host = "127.0.0.1";
    int port = 8080;

    // 创建套接字
    int sock = socket(AF_INET, SOCK_STREAM, 0);

    // 设置服务器地址
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = inet_addr(host);
    server_addr.sin_port = htons(port);

    // 绑定套接字到服务器地址
    bind(sock, (struct sockaddr *) &server_addr, sizeof(server_addr));

    // 开始侦听传入连接
    listen(sock, 5);

    while (true) {
        struct sockaddr_in client_addr;
        memset(&client_addr, 0, sizeof(client_addr));
        socklen_t client_addr_len = sizeof(client_addr);

        // 接受传入连接
        int client_sock = accept(sock, (struct sockaddr *) &client_addr, &client_addr_len);

        // 从客户端接收数据
        char buffer[1024];
        memset(buffer, 0, sizeof(buffer));
        recv(client_sock, buffer, sizeof(buffer), 0);

        // 发送响应到客户端
        std::string message = "Hello from server!";
        send(client_sock, message.c_str(), message.length(), 0);

        // 关闭客户端套接字
        close(client_sock);
    }

    return 0;
}
登入後複製

透過呼叫C 網路程式設計函數,您可以輕鬆實現多種網路協定。這些函數提供了一個乾淨高效的接口,來處理網路通訊的底層細節,讓您專注於應用程式邏輯。

以上是C++ 函式在網路程式設計中如何處理網路協定?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板