首頁  >  文章  >  後端開發  >  C++ 函式在網路程式設計中如何建立和管理伺服器端套接字?

C++ 函式在網路程式設計中如何建立和管理伺服器端套接字?

PHPz
PHPz原創
2024-04-26 13:03:02977瀏覽

C 為伺服器端套接字提供建立和管理功能,包括透過socket()建立套接字,透過bind()綁定位址和端口,以及透過listen()監聽連接。一旦建立,可使用accept()接受連接,send()/recv()發送/接收數據,最後透過close()關閉套接字。

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

C 函數如何在網路程式設計中建立和管理伺服器端套接字

網路程式設計中,伺服器端套接字是進程與客戶端通訊的關鍵。 C 為開發網路應用程式提供了豐富的函數,可用於在伺服器端建立和管理套接字。

建立伺服器端套接字

要建立伺服器端套接字,需要呼叫下列步驟:

  1. 使用 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() 函數關閉套接字。

實戰案例:TCP 伺服器

#以下是一個簡單的C TCP 伺服器範例,示範如何建立和管理伺服器端套接字:

#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;
}

以上是C++ 函式在網路程式設計中如何建立和管理伺服器端套接字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn