【发布时间】:2010-11-29 12:31:02
【问题描述】:
我正在编写简单的客户端-服务器程序。
客户端使用 UDP 或 TCP 向服务器发送一些消息。服务器必须能够同时支持 UDP 和 TCP。
如果客户端使用UDP发送消息,客户端中的方法调用序列为socket(),bind(),sendto(),recvfrom(),close(),服务器中的方法调用序列为socket(),bind(),sendto(),recvfrom(),close()。
如果它使用 TCP,
服务器中的调用顺序是
socket(),bind(),listen(),accept(),send(),recv(),close()。
而在客户端是
socket(),bind(),connect(),send(),recv(),close()
在我的程序中,用户/客户端在开始时可以选择他想使用 UDP 还是 TCP。所以,我的主要问题是,如果客户端使用 TCP 或 UDP 发送消息,我如何知道或区分服务器端。如果它使用 TCP,我必须调用 listen(),accept(),send(),recv() 如果它使用UDP,我不调用listen()、accept(),而是调用sendto()和recvfrom()。
那么,我如何在一开始就区分/知道这一点,以便进行适当的函数调用。
谢谢。
【问题讨论】:
-
那么,我应该在服务器端创建两个套接字,一个用于 UDP,另一个用于 TCP 吗?
-
@seg.server.fault:我建议不在您的客户端代码中调用
bind()。虽然它在技术上是可行的(并且在非常特定的情况下需要),但没有客户端bind()的默认行为通常是您在应用程序层想要的。另外,请记住,您可以在 UDP 套接字上调用connect()。它不做任何握手,但这确实意味着您可以使用send/recv而不是sendto/recvfrom,这最终可能会使客户端逻辑更简单。
标签: c++ c networking sockets network-programming