问题标签 [networkstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
3073 浏览

c# - 如何确定何时没有更多数据可在 NetworkStream 中读取?

我有一个 Web 应用程序,它使用 TCP 连接连接到服务器并读取二进制文档,然后将其写入其响应对象。换句话说,它使用自定义协议从后端服务器传输文件,并通过 HTTP 将该文件返回给客户端。

服务器发送一个状态码和一个 mime 类型,我读取成功,然后写入文件的内容并关闭套接字。这似乎工作正常。

客户端(C# Web 应用程序)读取数据:

这似乎总是在所有数据到达之前退出读取循环。我究竟做错了什么?

0 投票
2 回答
2604 浏览

.net - NetworkStream.DataAvailable 是否看到缓冲数据?

NetworkStream.DataAvailable 是否知道发送方的发送缓冲区是否为空?或者它只是简单地表明接收器的读缓冲区是否有数据?我的假设是后者...

具体来说,对于一些涉及正在进行的会话的套接字工作,我目前使用长度前缀,以便接收者确切知道当前批次中有多少数据;但是,我收到了一个 .patch,建议我改用 NetworkStream.DataAvailable。我担心的是,这只会告诉我接收者得到了什么——而不是发送者最初发送的——但我不是套接字专家。

我错了吗?或者长度前缀是要走的路?

(请注意,在流关闭之前,我不能简单地 Read(),因为在同一个连接上发送了多个批次,并且将每个批次视为单独的至关重要;如果我在一个批次中读取太多(即使它被缓冲并丢弃)然后对话将中断)。

0 投票
5 回答
739 浏览

.net - Delphi 7 中 .NETs NetworkStream / SslStream 的对应物

我在 .NET 中编写了一个安全的 TCP 服务器。这基本上就像创建一个 TcpListener 实例并用 SslStreams 包装连接的客户端的 NetworkStreams 一样简单。

现在我需要使用 Delphi 7(或者:Delphi 2007)访问这个 TCP 服务器。

我在帮助中没有找到任何内容,并且 Google 搜索显示了许多复杂的商业包。有没有更简单的解决方案,或者我忽略的德尔福集成的东西?

如果没有,我可以使用任何简单的免费或商业软件包吗?

0 投票
2 回答
18254 浏览

c# - 从字节数组读取行(不将字节数组转换为字符串)

我有一个从 NetworkStream 读取的字节数组。前两个字节表示随后的数据包的长度,然后将数据包读入该长度的字节数组中。我需要从 NetworkStream/byte 数组中读取的数据有一些字符串,即由换行符终止的可变长度数据,以及一些固定宽度的字段,如字节和长整数。所以,像这样:

我知道(并且有一些发言权)正在遇到的数据包的格式,我需要做的是为每个字符串值读取一个“行”,但为字节和 long 读取固定数量的字节。到目前为止,我提出的解决方案是使用while循环将字节读入临时字节数组,直到出现换行符。然后,将字节转换为字符串。这对我来说似乎很笨拙,但我没有看到另一种明显的方式。我意识到我可以使用StreamReader.ReadLine(),但这将涉及另一个流,而且我已经有一个NetworkStream. 但如果这是更好的解决方案,我会试一试。

我考虑的另一个选择是让我的后端团队为这些字符串值的长度写入一个或两个字节,以便我可以读取长度,然后根据指定的长度读取字符串。

所以,正如你所见,我有一些关于如何去做的选择,我希望你能就你认为最好的方法提供意见。这是我现在拥有的用于将整个数据包作为字符串读取的代码。接下来就是将数据包的各个字段打出来,根据数据包中的数据做实际需要做的编程工作,创建对象,更新UI等。

0 投票
3 回答
14546 浏览

c# - 如何在不阻塞的情况下调用 NetworkStream.Read()?

我想清空套接字的读取缓冲区,所以我编写了以下代码......

但是 Read() 方法被阻止了,所以我添加了tcpSocket.ReceiveTimeout = 1; . 它就像以前一样工作。

据我所知,这通常用于 C++。我怎么解决这个问题?

0 投票
3 回答
8797 浏览

c# - .NET NetworkStream 读取缓慢

我有一些网络代码来处理任意 TCP 连接。

这一切似乎都按预期工作,但似乎很慢。当我分析代码时,它似乎在 NetworkStream.Read() 中花费了 600 毫秒,我想知道如何改进它。我已经摆弄了缓冲区大小,并在一个巨大的缓冲区之间交替读取所有数据,或者一个小的缓冲区应该将数据连接到一个 StringBuilder 中。目前我使用的客户端是一个网络浏览器,但是这段代码是通用的,它很可能不是发送给它的 HTTP 数据。有任何想法吗?

我的代码是这样的:

编辑:我在两台完全独立的机器(我的 XP 开发机器和 colo 中的 2003 盒子)上得到大致相同的数字。我已经在相关部分的代码中添加了一些时间(使用 System.Diagnostic.StopWatch)并将其转储到日志中:

0 投票
2 回答
1345 浏览

.net - System.Net.Sockets.NetworkStream 的异步读取回调

我可能只是在这里误解了一些基本的东西,但是......

Senario:我调用System.Net.Sockets.NetworkStream'sBeginRead方法,我的机器收到来自网络设备的响应/请求。运行时在它自己的线程中运行我的回调。在这个线程可以调用之前EndRead,机器接收到另一个响应/请求。

问题:运行时会立即在另一个线程中调用我的回调,还是等待我再调用EndRead一次BeginRead

0 投票
1 回答
199 浏览

.net - 以与接收到的相同顺序运行异步 IO 线程以完成

对不起,我对所有这些多线程的东西都很陌生......

我正在开发一个客户端/服务器应用程序,我将使用System.Net.Sockets.NetworkStreamAsync IO 方法。

我知道调用后BeginRead,系统每次收到数据时都会开始调用我的回调。回调可能需要很长时间才能完成,但它需要在任何其他线程运行相同的回调之前完成。

如果我只是将我的回调方法标记为同步,这是否足以确保每个回调线程将按照系统接收数据的顺序运行完成?

如果不是,什么同步工具最好?(例如Monitors、WaitHandles、Semaphores? 等...)

编辑:这是在 Win Server 2008 上的 VB 2008 中

0 投票
2 回答
5703 浏览

c# - NetworkStream,是否有类似于 SerialPort 的 DataReceived 的东西?(C#)

好的,所以我有点困惑,为什么我在任何地方都找不到它,或者如果它不存在,那么为什么微软没有实现它?

所以这是我的场景,我有一个 NetworkStream,它有一个可爱的小布尔值,称为 DataAvailable,我需要的是一个事件,它会跳出并说“嘿,有可用的数据!” (因为我很懒,我宁愿被告知有可用的数据,也不愿一遍又一遍地问“好吧,有可用的数据吗?”直到我得到回应“实际上,这次有”)。

类似于 SerialPort 的东西(它有一个很好的事件(DataReceived),它告诉我正在从端口接收数据)会很好。但我正在使用带有 NetworkStream 的套接字。

如果我缺少明显的东西,请指出正确的方向,但如果没有,这是否意味着我将不得不在 DataAvailable 属性上使用一些数据绑定,并且当它设置为 true 时,调用我的自己的“自制”活动/功能?如果这将是方式,你能给我一个小例子来让球滚动吗?

编辑
我的完美答案是有人过来向我解释我如何找到/创建与 SerialPort 使用的 DataReceived 事件极为相似的东西,但为通过 NetworkStream 流式传输的 Socket 实现!

再次提前感谢,感谢。

0 投票
2 回答
1473 浏览

c# - 重新打开关闭的 NetworkStream?

早上好,

我需要一些建议,我正在使用从 TcpClient 流式传输的 networkStream,一切正常,但后来我需要其他地方的一些功能,这需要关闭流。一旦连接关闭,我似乎无法找到重新打开连接的方法。谁能在这里指出我正确的方向?

这是我所基于的代码示例:(显然这不是它的工作原理,但我已尽可能简化它:-))

提前感谢,感激不尽。

编辑 - 更改了变量拼写名称!哎呀!

编辑 - 抱歉,刚刚意识到问题来自其他地方,感谢您确认此代码是正确的 :-) 帮助我从另一个来源发现问题