c++ - 每个连接需要多少套接字?

标签 c++ c winsock winsock2

假设我们有一个带有 socket sa 和 new_socket 的服务器程序。我正在使用的教程采用 socket sa 和 new_socket,以及名为 serverclient 的两个 sockaddr_in 结构;然后将套接字绑定(bind)到 IP 地址:端口,然后调用 listen() 函数。当listen返回时,程序调用

new_socket = accept(sa, (struct sockaddr*)&client, &length);

我的问题是,假设有 3 个人正在连接... 我是否需要为每个 accept 函数提供 3 个不同的结构和 3 个不同的 new_sockets,比如说我是否希望我的服务器为连接到它的 3 个不同的客户端提供服务?

此外,为什么我们需要一个用于accept 的new_socket?为什么有两个不同的套接字 1 用于 bind 和 1 用于 accept?套接字操作不应该在 binded 上执行吗?

我正在尝试为套接字实现一个类,以使其对我来说更容易,并且作为练习我的 oop 技能的好方法....

最佳答案

服务器通常需要一个 socket 。您可以在该套接字中设置服务器正在监听的端口,并调用 accept() 以等待传入连接。

此外,每个客户端连接都需要一个套接字。这是一个由 accept() 返回的新套接字。这是必要的,因为服务器可以处理多个客户端。如果你对所有事情都使用一个套接字,就没有办法告诉你哪个客户端正在向你发送消息,或者指示向哪个客户端发送回复。

关于c++ - 每个连接需要多少套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15713582/

相关文章:

c++ - 未初始化读取问题

c++ - 构建 Qt-Static 5.3.2 时遇到问题

c - 在什么情况下我们应该使用 typedef 来定义结构体?

c++ - 如何在 Winsock 中查找当前使用的 UDP 接收缓冲区大小

c++ - 使用 winsock 进行文件传输 (c++)

c - 我应该在我的应用程序关闭时关闭套接字吗?

c++ - (C++) 数组中的特定值

c++ - 我们怎样才能使 QTableWidget 可以从多个线程访问,并将 QPushButtons 放在另一个线程的单元格中。?

c - pthread_self() 返回的线程 ID 与调用 gettid(2) 返回的内核线程 ID 不同

c - 关于关于强制转换的编译器警告