在C#客户端和节点服务器之间传输字符串

时间:2013-08-04 20:11:12

标签: c# node.js networking tcp

我有一个节点TCP服务器正在工作并等待数据和我拥有的每个套接字

socket.on("data", function () {

});

现在,据我所知,只要收到任何数据,就会调用此方法。这意味着如果我发送一个大字符串,它将被分段为多个数据包,每个数据包将分别调用该事件。因此,我可以连接数据,直到调用“结束”事件。根据Node文档,这会在发送FIN数据包时发生。

我不得不承认我对网络知之甚少但是这个FIN数据包,我必须在从我的C#app发送数据时手动发送它还是这个代码

var stream = client.GetStream();
using (var writer = new StreamWriter(stream)) writer.Write(request);

当它设法发送整个请求字符串时自动发送它? 其次,它如何从另一端起作用?如何从Node发送“批量”数据到我的C#客户端,以便它知道整个“批处理”应该被认为是一件事,尽管它在多个数据包中?

另外,即使在.NET中,是否有相当于“结束”的东西?目前,我阻塞直到流的DataAvailable为true,但是会在第一个数据包上触发,对吧?它不会等待整个事情。

如果有人能为我阐明这一点,我会很感激。

1 个答案:

答案 0 :(得分:1)

当您在C#中调用FIN时,将发送TCP writer.Close()数据包,这会在end中触发Node事件。

在没有看到你的C#阅读代码如何看起来我无法给出具体细节,但是当Node关闭连接时,C#不会触发事件。它将不再是stream.CanRead,如果您有一个当前stream.Read来电阻止,则会引发异常。

TCP提供了一个字节流,仅此而已。如果您计划从Node和C#来回发送多条消息,则由您自己发送消息以便将它们分开。例如,您可以为每条消息添加长度前缀,以便您读取一个字节,然后在消息之后读取多个字节。如果您的邮件始终是文字,则可以将其编码为JSON,并使用换行符分隔邮件。