我正在编写一个简单的客户端-服务器程序。
客户端使用UDP或TCP发送一些消息给服务器。服务器必须能够支持UDP和TCP两种协议。
如果客户端使用UDP发送消息,则客户端中的方法调用顺序为
如果客户端使用TCP发送消息,则服务器中的方法调用顺序为
在我的程序中,用户/客户端在开始时可以选择使用UDP还是TCP。因此,我的主要问题是如何在服务器端知道客户端是使用TCP还是UDP发送消息。如果它使用TCP,则我必须调用listen()、accept()、send()、recv(),如果它使用UDP,则不需要调用listen()、accept(),而是调用sendto()和recvfrom()。
那么,在开始时我应该如何区分/知道这一点,以便我可以进行适当的函数调用呢?
谢谢。
客户端使用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()。
那么,在开始时我应该如何区分/知道这一点,以便我可以进行适当的函数调用呢?
谢谢。
bind()
。虽然这在技术上是可能的(并且在非常特定的情况下是必需的),但没有客户端bind()
的默认行为通常是应用程序层所需的。此外,请记住,您可以在 UDP 套接字上调用connect()
。它不会进行任何握手,但这意味着您可以使用send/recv
而不是sendto/recvfrom
,这可能会使客户端逻辑更简单。 - Tom