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

在C#客户端和节点服务器之间传输字符串,c#,node.js,networking,tcp,C#,Node.js,Networking,Tcp,我有一个节点TCP服务器在工作,等待数据和每个套接字 socket.on("data", function () { }); 现在,据我所知,只要收到任何数据,就会调用它。这意味着,如果我发送一个大字符串,它将被分割成多个数据包,每个数据包将分别调用事件。因此,我可以连接数据,直到调用“end”事件。根据节点文档,发送FIN数据包时会发生这种情况 我不得不承认,我对网络不太了解,但是这个FIN数据包,在从我的C#app发送数据时,我必须手动发送它吗?或者这是代码吗 var stream =

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

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

});
现在,据我所知,只要收到任何数据,就会调用它。这意味着,如果我发送一个大字符串,它将被分割成多个数据包,每个数据包将分别调用事件。因此,我可以连接数据,直到调用“end”事件。根据节点文档,发送FIN数据包时会发生这种情况

我不得不承认,我对网络不太了解,但是这个FIN数据包,在从我的C#app发送数据时,我必须手动发送它吗?或者这是代码吗

var stream = client.GetStream();
using (var writer = new StreamWriter(stream)) writer.Write(request);
当它成功发送整个请求字符串时自动发送它? 第二,它是如何从另一端工作的?如何从节点向C#client发送“批”数据,使其知道整个“批”应被视为一件事,尽管它包含在多个数据包中

另外,即使在.NET中也有“end”的等价物吗?目前,我一直在阻塞,直到流的DataAvailable为true,但这将在第一个数据包上触发,对吗?它不会等整个事情


如果有人能帮我解释一下,我将不胜感激。

当您在C#中调用
writer.Close()
时,TCP
FIN
数据包将被发送,这将触发
节点中的
end
事件,如您所说

如果看不到您的C#reading代码的外观,我无法给出详细信息,但当节点关闭连接时,C#不会触发事件。它将不再是
stream.CanRead
,如果当前有
stream.Read
调用阻塞,它将抛出异常

TCP提供了字节流,仅此而已。如果您计划从Node和C#来回发送多条消息,则由您自行决定以可分离的方式发送消息。例如,您可以在每条消息的前面加上长度前缀,这样您就可以读取一个字节,然后读取消息后面的多个字节。如果您的消息总是文本,您可以将其编码为
JSON
,并用换行符分隔消息