>  기사  >  백엔드 개발  >  C++ 함수는 네트워크 프로그래밍에서 서버측 소켓을 어떻게 설정하고 관리합니까?

C++ 함수는 네트워크 프로그래밍에서 서버측 소켓을 어떻게 설정하고 관리합니까?

PHPz
PHPz원래의
2024-04-26 13:03:02974검색

C++는 소켓()을 통한 소켓 생성, 바인딩()을 통한 주소 및 포트 바인딩, 청취()를 통한 연결 수신 등 서버 측 소켓에 대한 설정 및 관리 기능을 제공합니다. 일단 설정되면, accept()를 사용하여 연결을 승인하고, send()/recv()를 사용하여 데이터를 보내고 받고, 마지막으로 close()를 사용하여 소켓을 닫을 수 있습니다.

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

C++ 함수가 네트워크 프로그래밍에서 서버측 소켓을 생성하고 관리하는 방법

네트워크 프로그래밍에서 서버측 소켓은 프로세스와 클라이언트 간 통신의 핵심입니다. C++는 서버 측에서 소켓을 설정하고 관리하는 데 사용할 수 있는 네트워크 애플리케이션 개발을 위한 풍부한 기능 세트를 제공합니다.

서버측 소켓 설정

서버측 소켓을 설정하려면 다음 단계를 호출해야 합니다.

  1. 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()소켓을 주소와 포트 번호에 바인딩하려면 bind() 함수를 사용하세요.
소켓을 청취 상태로 전환하려면 listen() 함수를 사용하세요.

#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;
}
서버측 소켓 관리

소켓이 설정되면 클라이언트와 통신하는 데 사용할 수 있습니다. 서버 측 소켓을 관리하는 주요 방법은 다음과 같습니다. 🎜
    🎜🎜클라이언트의 연결을 수락하려면 accept() 함수를 사용하세요. 🎜🎜🎜🎜데이터를 보내고 받으려면 send()recv() 함수를 사용하세요. 🎜🎜🎜🎜소켓을 닫으려면 close() 함수를 사용하세요. 🎜🎜🎜🎜🎜실용 사례: TCP 서버🎜🎜🎜다음은 서버측 소켓을 설정하고 관리하는 방법을 보여주는 간단한 C++ TCP 서버 예제입니다. 🎜rrreee

위 내용은 C++ 함수는 네트워크 프로그래밍에서 서버측 소켓을 어떻게 설정하고 관리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.