Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah fungsi C++ mewujudkan dan mengurus soket klien dalam pengaturcaraan rangkaian?

Bagaimanakah fungsi C++ mewujudkan dan mengurus soket klien dalam pengaturcaraan rangkaian?

WBOY
Lepaskan: 2024-04-27 21:18:02
asal
1219 orang telah melayarinya

Untuk mewujudkan dan mengurus soket klien dalam C++ anda perlu mengikuti langkah berikut: Gunakan fungsi socket() untuk mencipta soket. Gunakan fungsi connect() untuk menyambungkan soket ke pelayan. Gunakan fungsi send() dan recv() untuk bertukar data dengan pelayan.

C++ 函数在网络编程中如何建立和管理客户端端套接字?

C++ berfungsi untuk mewujudkan dan mengurus soket pelanggan dalam pengaturcaraan rangkaian

Menubuhkan dan mengurus soket pelanggan ialah tugas asas dalam pengaturcaraan rangkaian, dan C++ menyediakan beberapa fungsi untuk mencapai Sasaran ini.

Buat soket pelanggan

Gunakan fungsi socket() untuk mencipta soket: socket() 函数创建套接字:

#include <sys/socket.h>

int socket(int domain, int type, int protocol);
Salin selepas log masuk
  • domain: 指定协议族,通常使用 AF_INET(IPv4)或 AF_INET6(IPv6)。
  • type: 指定套接字类型,对于客户端通常使用 SOCK_STREAM(TCP)或 SOCK_DGRAM(UDP)。
  • protocol: 通常为 0,允许操作系统选择默认协议。

示例:

int sockfd = socket(AF_INET, SOCK_STREAM, 0);
Salin selepas log masuk

连接到服务器

使用 connect() 函数将客户端套接字连接到服务器:

#include <sys/socket.h>

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
Salin selepas log masuk
  • sockfd: 客户端套接字描述符。
  • addr: 服务器地址结构体(通常是 sockaddr_in)。
  • addrlen: 地址结构体的大小。

示例:

struct sockaddr_in servaddr;
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(80);
inet_pton(AF_INET, "192.168.1.100", &servaddr.sin_addr);

int rc = connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
Salin selepas log masuk

发送和接收数据

使用 send()recv() 函数与服务器交换数据:

#include <sys/socket.h>

ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
Salin selepas log masuk
  • sockfd: 客户端套接字描述符。
  • buf: 数据缓冲区。
  • len: 发送或接收的数据长度。
  • flags: 标志,通常为 0
    char buf[1024];
    int n = recv(sockfd, buf, sizeof(buf), 0);
    Salin selepas log masuk
    • domain:
    Tentukan keluarga protokol, biasanya gunakan AF_INET (IPv4) atau AF_INET6 (IPv6).

  • jenis: Menentukan jenis soket, untuk pelanggan biasanya menggunakan SOCK_STREAM (TCP) atau SOCK_DGRAM (UDP).

  • protokol: Biasanya 0, membenarkan sistem pengendalian memilih protokol lalai.

    Contoh: 🎜🎜
    #include <iostream>
    #include <sys/socket.h>
    #include <netinet/in.h>
    
    int main() {
        // 创建套接字
        int sockfd = socket(AF_INET, SOCK_STREAM, 0);
        if (sockfd < 0) {
            std::cout << "Error creating socket" << std::endl;
            return -1;
        }
    
        // 连接到服务器
        struct sockaddr_in servaddr;
        servaddr.sin_family = AF_INET;
        servaddr.sin_port = htons(80);
        inet_pton(AF_INET, "192.168.1.100", &servaddr.sin_addr);
        int rc = connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
        if (rc < 0) {
            std::cout << "Error connecting to server" << std::endl;
            return -1;
        }
    
        // 发送数据
        const char *msg = "Hello, server!";
        int n = send(sockfd, msg, strlen(msg), 0);
        if (n < 0) {
            std::cout << "Error sending data" << std::endl;
            return -1;
        }
    
        // 接收数据
        char buf[1024];
        n = recv(sockfd, buf, sizeof(buf), 0);
        if (n < 0) {
            std::cout << "Error receiving data" << std::endl;
            return -1;
        }
    
        std::cout << "Received data: " << buf << std::endl;
    
        // 关闭套接字
        close(sockfd);
    
        return 0;
    }
    Salin selepas log masuk
    🎜🎜Sambung ke pelayan🎜🎜🎜Gunakan fungsi connect() untuk menyambungkan soket klien ke pelayan: 🎜rreee
    • 🎜 : 🎜 Deskriptor soket pelanggan. 🎜
    • 🎜addr:🎜 Struktur alamat pelayan (biasanya sockaddr_in). 🎜
    • 🎜addrlen:🎜 Saiz struktur alamat. 🎜🎜🎜🎜Contoh: 🎜🎜rrreee🎜🎜Menghantar dan menerima data🎜🎜🎜Gunakan fungsi send() dan recv() untuk bertukar data dengan pelayan: 🎜 rrreee
      • 🎜sockfd:🎜 Deskriptor soket pelanggan. 🎜
      • 🎜buf:🎜 Penimbal data. 🎜
      • 🎜len:🎜 Panjang data yang dihantar atau diterima. 🎜
      • 🎜bendera:🎜 Bendera, biasanya 0. 🎜🎜🎜🎜Contoh:🎜🎜rrreee🎜🎜Kes praktikal: mewujudkan dan mengurus soket pelanggan🎜🎜🎜Ini ialah program C++ lengkap yang menunjukkan cara menggunakan fungsi di atas untuk mewujudkan dan mengurus soket pelanggan:🎜 rrreee

    Atas ialah kandungan terperinci Bagaimanakah fungsi C++ mewujudkan dan mengurus soket klien dalam pengaturcaraan rangkaian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan