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

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

PHPz
PHPzasal
2024-04-26 13:03:02937semak imbas

C++ menyediakan fungsi penubuhan dan pengurusan untuk soket sisi pelayan, termasuk mencipta soket melalui soket(), alamat penjilidan dan port melalui bind(), dan mendengar sambungan melalui listen(). Setelah ditubuhkan, anda boleh menggunakan accept() untuk menerima sambungan, send()/recv() untuk menghantar/menerima data, dan akhirnya menutup soket dengan close().

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

Bagaimana fungsi C++ mencipta dan mengurus soket sisi pelayan dalam pengaturcaraan rangkaian

Dalam pengaturcaraan rangkaian, soket sisi pelayan adalah kunci kepada komunikasi antara proses dan klien. C++ menyediakan set fungsi yang kaya untuk membangunkan aplikasi rangkaian yang boleh digunakan untuk mewujudkan dan mengurus soket di bahagian pelayan.

Mewujudkan soket sisi pelayan

Untuk mewujudkan soket sisi pelayan, langkah berikut perlu dipanggil:

  1. Buat soket menggunakan fungsi socket(). socket() 函数创建一个套接字。
  2. 使用 bind() 函数将套接字与一个地址和端口号绑定。
  3. 使用 listen() 函数使套接字处于监听状态。
#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>

int main() {
  // 创建套接字
  int server_fd = socket(AF_INET, SOCK_STREAM, 0);
  if (server_fd == -1) {
    std::cerr << "socket() failed" << std::endl;
    return -1;
  }

  // 绑定套接字
  struct sockaddr_in server_addr;
  server_addr.sin_family = AF_INET;
  server_addr.sin_port = htons(8080);
  server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  int bind_result = bind(server_fd, (struct sockaddr *) &server_addr, sizeof(server_addr));
  if (bind_result == -1) {
    std::cerr << "bind() failed" << std::endl;
    return -1;
  }

  // 监听套接字
  int listen_result = listen(server_fd, 5);
  if (listen_result == -1) {
    std::cerr << "listen() failed" << std::endl;
    return -1;
  }

  // ... // 处理客户端连接的代码
}

管理服务器端套接字

一旦套接字建立,可以将其用于与客户端进行通信。以下是如何管理服务器端套接字的几种主要方法:

  • 使用 accept() 函数接受来自客户端的连接。
  • 使用 send()recv() 函数发送和接收数据。
  • 使用 close()Gunakan fungsi bind() untuk mengikat soket ke alamat dan nombor port.
Gunakan fungsi listen() untuk meletakkan soket dalam keadaan mendengar.

#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>  // for close()

int main() {
  // 创建套接字
  int server_fd = socket(AF_INET, SOCK_STREAM, 0);
  if (server_fd == -1) {
    std::cerr << "socket() failed" << std::endl;
    return -1;
  }

  // 绑定套接字
  struct sockaddr_in server_addr;
  server_addr.sin_family = AF_INET;
  server_addr.sin_port = htons(8080);
  server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  int bind_result = bind(server_fd, (struct sockaddr *) &server_addr, sizeof(server_addr));
  if (bind_result == -1) {
    std::cerr << "bind() failed" << std::endl;
    return -1;
  }

  // 监听套接字
  int listen_result = listen(server_fd, 5);
  if (listen_result == -1) {
    std::cerr << "listen() failed" << std::endl;
    return -1;
  }

  // 接受客户端连接
  int client_fd;
  while ((client_fd = accept(server_fd, (struct sockaddr *) NULL, NULL)) != -1) {
    // 为客户端创建子进程进行处理
    if (fork() == 0) {
      // ... // 处理客户端连接的代码
      close(client_fd);
      exit(0);
    }
  }

  // 关闭套接字
  close(server_fd);

  return 0;
}
Urus soket sisi pelayan

Setelah soket diwujudkan, ia boleh digunakan untuk berkomunikasi dengan pelanggan. Berikut ialah cara utama untuk mengurus soket sisi pelayan: 🎜
    🎜🎜Gunakan fungsi accept() untuk menerima sambungan daripada pelanggan. 🎜🎜🎜🎜Gunakan fungsi send() dan recv() untuk menghantar dan menerima data. 🎜🎜🎜🎜Gunakan fungsi close() untuk menutup soket. 🎜🎜🎜🎜🎜Kes Praktikal: Pelayan TCP🎜🎜🎜Berikut ialah contoh pelayan TCP C++ mudah yang menunjukkan cara mewujudkan dan mengurus soket sisi pelayan: 🎜rrreee

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

Kenyataan:
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