在C++中从头开始制作TCP套接字 我试图在C++中设置一个简单的TCP套接字,而不使用任何非标准库。 我想创建一个客户端套接字和一个服务器客户端,并从客户端向服务器传递一个整数。有人能给我一个简单的服务器和客户机类的例子吗?

在C++中从头开始制作TCP套接字 我试图在C++中设置一个简单的TCP套接字,而不使用任何非标准库。 我想创建一个客户端套接字和一个服务器客户端,并从客户端向服务器传递一个整数。有人能给我一个简单的服务器和客户机类的例子吗?,c++,sockets,tcp,C++,Sockets,Tcp,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_numb

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));
好了。。。现在,您可以像读取和写入任何其他文件一样读取和写入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

现在你可以像读/写任何文件一样读/写c了。s是侦听套接字,您只能在其上接受。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));
好了。。。现在,您可以像读取和写入任何其他文件一样读取和写入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

现在你可以像读/写任何文件一样读/写c了。s是侦听套接字,您只能在其上接受它。

在Google中键入“套接字教程”,这可能是一个起点。实际上,我已经在google上搜索了一段时间,我在Socket上找到的一切似乎都掩盖了端口号的创建和绑定,并将重点放在了发送部分。或者教程正在使用外部非标准库。谢谢你的起点,我会看一看。没有任何非标准库。这行不通。C++标准库只包含很少的与OS(例如文件流)通信的工具。因此,您必须编写依赖操作系统的代码。。。。使用非C++标准库。@DyP我所说的非标准是指为特定用途定制的自定义类。在Google中键入“socket tutorial”这可能是一个起点。实际上,我已经在google上搜索了一段时间,我在Socket上找到的一切似乎都掩盖了端口号的创建和绑定,并将重点放在了发送部分。或者教程正在使用外部非标准库。谢谢你的起点,我会看一看。没有任何非标准库。这行不通。C++标准库只包含很少的与OS(例如文件流)通信的工具。因此,您必须编写依赖操作系统的代码。。。。使用非C++标准库。@DyP我所说的非标准是指为特定用途定制的自定义类。这并不是说这个答案是错误的,也不是什么,但这不是标准C库。这是一个由操作系统提供的API,头文件的位置对此是明确的。是和否。这些函数是在标准库中编译的C代码,但正如您所暗示的,它们只是操作系统提供的API的一个薄包装。这并不是说这个答案是错误的,也不是什么,但这不是标准C库。这是一个由操作系统提供的API,头文件的位置是明确的。是和否。这些函数是在标准库中编译的C代码,但正如您所暗示的,它们只是操作系统提供的API的一个薄型包装。