【问题标题】:Error : "Transport endpoint is already connected"错误:“传输端点已连接”
【发布时间】:2011-10-31 17:04:02
【问题描述】:

我正在尝试用 C 开发一个小型聊天服务器。

对于一个简单的聊天服务器,

  • (传输端点)===(套接字)?
  • 我必须为每个客户端使用一个套接字,还是可以为多个客户端重复使用一个套接字?如果有,怎么做?
  • 有这样做的标准方法吗?
  • 有什么好的参考资料吗?

我可以看看一些示例实现吗?我必须使用 gcc 编译器和 c 语言来完成这项任务。

【问题讨论】:

  • 每个帖子一个问题,拜托。你能选择只问一件事吗?你帖子的标题有一个非常好的、具体的错误信息,但你的帖子根本不是关于这个的。
  • 好的,我很乐意得到标题的答案。是的,身体让我想到了这个问题:)
  • 如果您希望我们回答标题问题,如何从正文中编辑所有其他内容并将其替换为有助于我们回答标题问题的内容,例如您正在尝试什么代码运行会导致该错误?
  • @John Zwinick 是的!编辑。需要更多信息?有什么事吗?

标签: c sockets network-programming unix-socket


【解决方案1】:

您需要一个套接字/客户端,不,您不能重复使用套接字。如果您必须处理多个客户,您可以:

  • 为每个客户端创建一个线程并使用阻塞 I/O(最好使用超时)。
  • 创建单线程程序并使用 select/poll/epoll/kqueue 进行多路分离并使用非阻塞 I/O。
  • 使用异步 I/O。

对于 C 套接字通信示例 Unix Network Programming 这本书可能是最好的来源。它有大量的示例程序和解释。

【讨论】:

  • 对不起,我觉得你说的有内容,但我没看懂!我很想以多线程的方式来做。
【解决方案2】:
  1. (传输端点)===(套接字)?

没有。 “端点”是指带有端口号的 IP 地址。 Socket呈现一个“Session”,会话由两个端点组成,本地端点(IP,端口)和远程端点(IP,端口)。

  1. 我是否必须为每个客户端使用一个套接字,或者我可以重复使用一个套接字吗? 多个客户?如果有,怎么做?

每个会话一个套接字。这意味着服务器需要为每个远程端点(客户端)创建一个新的套接字。您可以在不再使用套接字时重复使用它。寻找 SO_REUSEADDR 套接字选项。

  1. 有这样做的标准方法吗?

不知道你在问什么。聊天服务或服务器/客户端模型的标准方式? 对于聊天服务,寻找 IRC。服务器/客户端编程模型有据可查。你可以谷歌一下。

  1. 有什么好的参考资料吗?

http://beej.us/guide/bgnet/

现在我相信你明白错误信息的含义了。

【讨论】:

猜你喜欢
  • 2012-04-10
  • 2018-08-28
  • 2013-04-06
  • 2016-06-28
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2018-11-06
相关资源
最近更新 更多