Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Node.js TCP传入消息拆分为包_C#_Sockets_Node.js_Tcp - Fatal编程技术网

C# Node.js TCP传入消息拆分为包

C# Node.js TCP传入消息拆分为包,c#,sockets,node.js,tcp,C#,Sockets,Node.js,Tcp,当通过TCP连接接收Node.js中的大数据包时,我遇到了一个问题。 缓冲区中似乎有一个上限设置为约55kB。当我收到大量数据(大约70-80k)时,它会将这些数据拆分 现在,我已经使用了UDP套接字,我知道如何在('data',function(){})事件上期望,以及如何在('end',function(){})上期望当消息最终被接收时,TCP的问题是我从未在('end',function(){})事件上收到,服务器(在C#)中)从未发送FIN数据包。这是因为我需要保持套接字的活动性和持续性

当通过TCP连接接收Node.js中的大数据包时,我遇到了一个问题。 缓冲区中似乎有一个上限设置为约55kB。当我收到大量数据(大约70-80k)时,它会将这些数据拆分

现在,我已经使用了UDP套接字,我知道如何在('data',function(){})事件上期望
,以及如何在('end',function(){})
上期望
当消息最终被接收时,TCP的问题是我从未在('end',function(){})
事件上收到
,服务器(在C#)中)从未发送FIN数据包。这是因为我需要保持套接字的活动性和持续性(我们不想关闭它)

是否有某种方式可以在不关闭套接字的情况下将FIN数据包从C#发送到Node.js

或者,另一种方法是在节点本身内部触发('end',function(){})
事件上的

问候

编辑: 为了解决这个问题,假设我有两个客户端试图通过TCP套接字获取信息。一个先连接,然后得到一个巨大的请求(这里的大小没有问题)

但是,当处理这个请求时,另一个请求执行相同的请求,因为TCP连接是通过节点的,所以它们使用相同的套接字。
有没有办法区分这些请求?或者我必须为TCP服务器的每个请求设置一个套接字吗?

UDP是面向数据包的。您可以发送一个数据包所能容纳的数据量,最大绝对值为65507字节。这是一种“一劳永逸”,没有处理数据包丢失或重新排序的内在机制

TCP是面向流的。您的数据将根据几个因素(包括数据量和传输速率)分成数据包。这主要超出您的控制范围,由TCP/IP堆栈管理。您得到的回报是有序的数据包序列和一定程度的容错性(保证正确的数据包顺序,TCP/IP协议栈对应用程序代码透明地检测和处理丢失/重复的数据包)


如果您在节点中的套接字级别工作,几乎肯定会得到多个回调,每个回调包含一块数据。这取决于你把它重新缝合在一起。这是一件好事-这意味着您可以定义自己的机制来识别消息边界、数据压缩等。

UDP是面向数据包的。您可以发送一个数据包所能容纳的数据量,最大绝对值为65507字节。这是一种“一劳永逸”,没有处理数据包丢失或重新排序的内在机制

TCP是面向流的。您的数据将根据几个因素(包括数据量和传输速率)分成数据包。这主要超出您的控制范围,由TCP/IP堆栈管理。您得到的回报是有序的数据包序列和一定程度的容错性(保证正确的数据包顺序,TCP/IP协议栈对应用程序代码透明地检测和处理丢失/重复的数据包)


如果您在节点中的套接字级别工作,几乎肯定会得到多个回调,每个回调包含一块数据。这取决于你把它重新缝合在一起。这是一件好事-这意味着您可以定义自己的机制来识别消息边界、数据压缩等。

我会说尝试缓冲和追加

我会说尝试缓冲和追加

我有一个类似的问题,看起来您需要采用两种技术:

  • 一种解析信息并将其放在一起的方法——我使用了以下答案[问题]:
  • 您可以为第二个客户端启动新的tcp连接,也可以为每个请求创建一个包含clientID的数组。当一条消息从服务器返回时,您将获取数组中的第一个clientID并将消息传递给他们

  • 我有一个类似的问题,看起来您需要采用两种技术:

  • 一种解析信息并将其放在一起的方法——我使用了以下答案[问题]:
  • 您可以为第二个客户端启动新的tcp连接,也可以为每个请求创建一个包含clientID的数组。当一条消息从服务器返回时,您将获取数组中的第一个clientID并将消息传递给他们

  • 您是否知道消息的大小,即消息是否包含自身大小或有效负载?是否有任何类型的消息结束标记?好吧,为了解决这个问题,我们现在设置了一个消息结束标记,但我们希望有一个更好的解决方案。问题是TCP是一个流协议,数据流像流,消息之间没有内置边界。它可靠且易于使用,但如果不作为纯数据流使用,则通常需要在其上分层另一个协议。我明白了,很好地补充了这个问题,例如,我有两个客户端试图通过TCP套接字获取信息。一个先连接,然后得到一个巨大的请求(这里的大小没有问题)。但是,当处理这个请求时,另一个请求执行相同的请求,因为TCP连接是通过节点的,所以它们使用相同的套接字。有没有办法区分这些请求?或者我必须为每个正在执行的请求设置一个套接字?我将此添加为对问题的编辑。两个客户端的服务器套接字将是相同的,但为每个客户端定义连接的套接字对将是不同的。服务器上accept()返回的套接字对象对于每个连接的客户端都是唯一的,因此很容易区分请求。您知道消息的大小吗,即消息是否包含自身大小或有效负载?有什么消息结束标记吗?为了解决这个问题,现在我们设置了一个消息结束标记,但我们希望有一个