c#客户端和服务器之间的套接字消息
c# Sockets messages between client and server
我目前正在学习如何在 C# 上使用套接字,并且有一个关于客户端和服务器之间的消息应该如何传输的问题。
目前我有一个服务器应用程序和一个客户端应用程序,在每个应用程序中我都有一些字符串作为命令。例如,当客户端需要来自服务器的时间时,我有一个这样的字符串:
public const string GET_TIME_COMMAND = "<GET_TIME_COMMAND>";
然后我在服务器上有一个 if 语句,它检查从客户端发送的消息是否以该字符串开头,如果是,它使用另一个命令向客户端发送另一条消息,时间在 json 字符串.
我的问题是,这是一个很好的方法吗?如果不是,你能建议我另一种方法吗?
TCP
请记住,TCP 是基于流的连接。您可能会也可能不会在一条消息中获得完整的命令。您甚至可以在一次阅读中获得多个命令。
为了解决这个问题,TCP 消息通常有一个唯一的开始和停止序列或字节,可能不是消息的一部分。
(SomeCommand)
其中 (
是起点,)
是终点。
另一种方法 os 在包含消息长度的实际消息前添加 header。
11 S O M E M E S S A G E
其中 11 是消息长度,somemessage
是实际消息。您通常会以字节或 ushort 的形式传输长度,而不是字符串文字。
在这两种情况下,您都必须一遍又一遍地阅读,直到获得一条完整的消息 - 然后您可以将其发送到应用程序中。
TCP 也是基于连接的。您必须连接到远程站点。优点是 TCP 确保所有消息都按照您放入它们的顺序发送。TCP 还会自动 re-send lost 数据包,您不必担心。
UDP
相反,UDP是基于message/packet的,但它不可靠。您可能会或可能不会收到消息,并且在某些情况下必须 re-send 它。 UDP 也没有 "session" 的概念。如果需要,您必须自己做。
您问题的答案取决于所使用的协议。对于 TCP,这不适用于您当前的消息格式。您可能必须在前面加上 header.
您可以使用 UDP,但是您可能必须检测并 re-send 收到 lost 的消息。
我目前正在学习如何在 C# 上使用套接字,并且有一个关于客户端和服务器之间的消息应该如何传输的问题。
目前我有一个服务器应用程序和一个客户端应用程序,在每个应用程序中我都有一些字符串作为命令。例如,当客户端需要来自服务器的时间时,我有一个这样的字符串:
public const string GET_TIME_COMMAND = "<GET_TIME_COMMAND>";
然后我在服务器上有一个 if 语句,它检查从客户端发送的消息是否以该字符串开头,如果是,它使用另一个命令向客户端发送另一条消息,时间在 json 字符串.
我的问题是,这是一个很好的方法吗?如果不是,你能建议我另一种方法吗?
TCP
请记住,TCP 是基于流的连接。您可能会也可能不会在一条消息中获得完整的命令。您甚至可以在一次阅读中获得多个命令。
为了解决这个问题,TCP 消息通常有一个唯一的开始和停止序列或字节,可能不是消息的一部分。
(SomeCommand)
其中 (
是起点,)
是终点。
另一种方法 os 在包含消息长度的实际消息前添加 header。
11 S O M E M E S S A G E
其中 11 是消息长度,somemessage
是实际消息。您通常会以字节或 ushort 的形式传输长度,而不是字符串文字。
在这两种情况下,您都必须一遍又一遍地阅读,直到获得一条完整的消息 - 然后您可以将其发送到应用程序中。
TCP 也是基于连接的。您必须连接到远程站点。优点是 TCP 确保所有消息都按照您放入它们的顺序发送。TCP 还会自动 re-send lost 数据包,您不必担心。
UDP
相反,UDP是基于message/packet的,但它不可靠。您可能会或可能不会收到消息,并且在某些情况下必须 re-send 它。 UDP 也没有 "session" 的概念。如果需要,您必须自己做。
您问题的答案取决于所使用的协议。对于 TCP,这不适用于您当前的消息格式。您可能必须在前面加上 header.
您可以使用 UDP,但是您可能必须检测并 re-send 收到 lost 的消息。