用 C++ 从头开始​​创建 TCP 套接字

dha*_*001 1 c++ sockets tcp

我正在尝试在 C++ 中设置一个简单的 TCP 套接字,而不使用任何非标准库。我想创建一个客户端套接字和一个服务器客户端,并将一个整数从客户端传递到服务器。有人可以给我一个服务器和客户端类的简单示例吗?

Bri*_*ite 5

C++ 没有提供套接字的“标准库”,但当然可以访问套接字的标准 C 库。

#include <sys/socket.h>

sockaddr_in addr;
bzero(&addr, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(destination_address_as_32bit_number);
addr.sin_port = htons(destination_port_number_as_16bit_number);

int s = socket(AF_INET, SOCK_STREAM, 0);
connect(s, &addr, sizeof(addr));
Run Code Online (Sandbox Code Playgroud)

好了...现在您可以像任何其他文件一样读取和写入“s”。
在服务器上你做的有点不同:

#include <sys/socket.h>

sockaddr_in addr;
bzero(&addr, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = 0; // bind to all interface addresses
addr.sin_port = htons(local_port_number_as_16bit_number);

int s = socket(AF_INET, SOCK_STREAM, 0);
bind(s, &addr, sizeof(addr));
listen(s, 50);  // 50 (the backlog) isn't really used on modern systems
int c = accept(s, &addr, sizeof(addr));  // addr gets info about client
Run Code Online (Sandbox Code Playgroud)

现在您可以像任何文件一样读取/写入“c”。“s”是监听套接字,您除了 之外什么也不做accept()

  • 并不是说这个答案是错误的或有什么问题,但这不是“标准 C 库”。它是操作系统提供的 API,头文件的位置对此是明确的。 (5认同)