【问题标题】:How many sockets are needed per connection?每个连接需要多少个套接字?
【发布时间】:2013-03-30 08:46:39
【问题描述】:

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

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

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

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

我正在尝试为套接字实现一个类,以使我更轻松,并作为练习我的 oop 技能的好方法......

【问题讨论】:

  • 你通常有一个套接字来监听传入的连接,每个客户端一个套接字。

标签: c++ c winsock winsock2


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回复。所以让我们说如果我做一个服务器,但我不知道有多少人会连接到它。我的程序如何根据连接到它的客户端数量知道要创建多少个套接字?我是否会使用 new 或 malloc 声明一组套接字,然后每次监听解除阻塞时添加一个套接字?此外,在本教程中,一旦您连接到它,服务器就会退出。如果我想让服务器保持活动状态,我必须循环哪些 winsock 函数(也许接受并收听?)
  • 您只听一次,每次连接接受一次返回。将插座存放在任何类型的容器中。您将需要使用 select() 来检测哪个套接字(包括您的接受套接字)有要处理的数据包。
  • 是的,您使用数组。每当accept() 返回时,您就将新套接字添加到数组中。如果数组已满,您可以使用 realloc() 扩展它以处理更多客户端。您只需调用一次listen(),然后在主循环中调用accept() 即可获得新的连接。
  • 我认为您的问题超出了适合 SO 的类型。这不是一个教程和讨论网站,您需要阅读编程教程或与您的讲师讨论您想要的内容。
猜你喜欢
  • 2012-05-24
  • 2010-10-13
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
  • 2013-12-14
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多