2011-08-21 135 views
1

我试图发展与C.错误:“传输端点已经连接”

小聊天服务器

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

  • (运输终点)===(插座) ?
  • 我是否必须为每个客户端使用一个套接字,还是可以为多个客户端重复使用套接字?如果是这样,怎么样?
  • 有没有这样做的标准方式?
  • 有没有很好的参考?

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

+0

每个帖子有一个问题,请。你能选择一件事来问吗?你的文章的标题有一个非常好的,具体的错误信息,但是那时你的文章根本就没有这个意思。 –

+0

okey,我很乐意为题目得到答案。是的,身体引导我回答这个问题:) – Jaseem

+0

如果你希望我们回答标题问题,那么如何编辑所有其他材料并用一些可以帮助我们回答标题问题的东西取代它,例如你试图运行哪些代码导致该错误? –

回答

3

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

  • 为每个客户端创建一个线程并使用阻塞I/O(最好具有超时)。
  • 创建单线程程序并使用select/poll/epoll/kqueue解复用并使用非阻塞I/O。
  • 使用异步I/O。

对于C socket通信示例Unix Network Programming本书可能是最好的来源。它有充足的示例程序和解释。

+0

对不起,我认为你所说的话有内容,但我不太了解!我很乐意以多线程的方式做到这一点。 – Jaseem

+0

'UNIX网络编程'是漫长而复杂的: – Jaseem

+0

跳过你不感兴趣的章节... –

1
  1. (Transport endpoint)===(socket)?

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

  1. 我是否必须使用每个客户一个插座,或者我可以重用的 多个客户端的插座?如果是这样,怎么样?

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

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

不知道你在问什么。聊天服务或服务器/客户端模型的标准方式? 对于聊天服务,请查找IRC。服务器/客户端编程模型已有详细记录。你可以谷歌它。

  1. 是否有很好的参考?

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

现在我相信你明白错误信息的意思。

+0

如果我想连续地将数据从1个客户端传输到1个服务器(简单字符串从标准输入)我应该怎么做? – Jaseem

+0

你为什么不读我提到的参考资料?http://beej.us/guide/bgnet/output/html/multipage/clientserver.html – young

+0

我在上面!现在通过参考。 – Jaseem