C# TCP/IP帧,散布消息

C# TCP/IP帧,散布消息,c#,asp.net,.net,tcp,C#,Asp.net,.net,Tcp,我正在深入研究.NET中的一些TCP/IP套接字编程,我开始了解如何使用消息框架来区分TCP/IP数据流中的“消息”,例如使用消息开始和结束分隔符 然而,如果消息字节彼此交错发送,我无法理解会发生什么。考虑下面的场景(我甚至不确定这个场景是否有意义,所以请让我知道如果我误解了什么): 规则1:当web服务接收到新的HTTP请求时,它必须向特定的客户端发送TCP/IP消息 规则2:web服务将通过TCP/IP发送到客户端的消息将采用ASCII格式,消息将为“+message_TEXT |”,加号作

我正在深入研究.NET中的一些TCP/IP套接字编程,我开始了解如何使用消息框架来区分TCP/IP数据流中的“消息”,例如使用消息开始和结束分隔符

然而,如果消息字节彼此交错发送,我无法理解会发生什么。考虑下面的场景(我甚至不确定这个场景是否有意义,所以请让我知道如果我误解了什么):

规则1:当web服务接收到新的HTTP请求时,它必须向特定的客户端发送TCP/IP消息

规则2:web服务将通过TCP/IP发送到客户端的消息将采用ASCII格式,消息将为“+message_TEXT |”,加号作为消息开始分隔符,管道符号作为消息结束分隔符

规则3:在客户机中,每个字节在接收时都会被检查,当它接收到消息“开始”分隔符时,它将开始用ASCII编码的消息填充新字符串。当收到消息“结束”分隔符时,它将知道消息已完成并对其进行处理

场景:web服务同时接收两个HTTP请求,这导致两条消息通过TCP/IP发送到客户端,当接收并重新组合字节时,它们看起来像这样(ASCII编码):“+ME+Messsage_AGESTART | u START |”

我意识到实际上是“同时”的HTTP请求相对较少,但由于每个HTTP请求本质上都在其自己的线程中,所以这是一种可能性。这是一种可能的情况吗?如果是这样,您如何知道哪个字节与哪个消息一起?还是我只是对整个事情感到困惑


谢谢

向客户端发送数据的代码必须调整套接字上发送的数据

如果有多个线程都使用同一个连接,请在套接字流上使用一个锁,并在消息完全发送之前保持该锁,这将防止其他线程导致消息混杂


另一种方法是让一个专用线程从消息队列中读取并发送消息,然后将每条消息放到队列中,并在处理过程中发送消息。

消息将通过不同的连接到达,除非您使用完全死机的TCP实现。实际上,您不必担心HTTP服务器与TCP套接字是分开的,对吗?因此,到达的HTTP请求将为TCP套接字排队消息,而TCP套接字与HTTP响应无关?CodeCaster:正确。web服务调用基本上只是向客户端发送消息。HTTP响应在这种情况下并不重要。@pm100:感谢您的澄清。没有意识到每个新流都是TCP/IP中的一个新连接。。。我认为来自同一服务器的同一端口意味着相同的连接。听起来这是我的困惑。我还是加了一把锁,只是为了确定一下。:)我没有考虑使用锁。好主意。