问题标签 [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 投票
2 回答
2881 浏览

.net - 从网络流中读取:数据包分段

我有一台服务器通过NetworkStream.Read.

应用协议为:

ClientMessage [128 字节] → 来自服务器的响应 [128 字节]

现在在服务器端:是否有可能MyTcpClient.GetStream().Read()只返回 < 128 字节,尽管来自客户端的所有消息都是 128 字节长?

我想这样的客户端消息足够短,可以放入 tcp/ip 层上的一个数据包中——但是会不会有某种碎片或随机的呢?

NetworkStream.DataAvailable防御这种情况的正确属性是什么?

在平稳运行了几个小时后,我有时会遇到奇怪的错误和连接丢失,这就是类似的情况。

提前致谢。

0 投票
1 回答
2685 浏览

c# - 如何停止 NetworkStream 上的阻塞 StreamReader.EndOfStream

我比较TcpClient喜欢Threadwhile (!streamReader.EndOfStream) {}. NetworkStream只要 TCP 连接打开并且没有可读取的数据,EndOfStream就会阻塞执行,所以我想知道我应该怎么做才能中止从线程外部读取。

由于EndOfStream是阻塞的,单独设置一个名为stopto的私有字段true不会有多大好处(至少在我的测试中),所以我所做的如下:

这是中止从 a 读取的推荐方法,NetworkStream还是我可以使用其他一些技术来安全(但强制)处理所有内容?

0 投票
2 回答
2854 浏览

.net - 如何将 TCPClient 和 NetworkStream 移植到 Silverlight?

为什么 Silverlight 中缺少 TCPClient 和 NetworkStream?
是否有任何已知的 TCPClient 和 NetworkStream 端口到 Silverlight?
如果没有,我是否可以将源代码从 .NET 4 运行时复制到我自己的库中?
如果没有,我如何开始将这些类移植到 Silverlight?

0 投票
2 回答
9486 浏览

c# - 如何正确异步编写 Socket/NetworkStream?

我想使用NetworkStream(或者也许Socket)来读/写 TCP 连接。我想使用非阻塞操作,这样我就不必处理多个线程,或者处理如果某些线程可能因阻塞网络操作而停止时如何停止程序的问题。

NetworkStream.Read的文档暗示它是非阻塞的(“如果没有数据可用于读取,则 Read 方法返回 0”),所以我想我不需要异步回调来读取......对吗?

但是写作呢?好吧,微软有一个关于这个主题的通常的低质量教程,他们建议AsyncCallback为每个操作编写一个繁琐的方法。这个回调中的代码有什么意义?

的文档AsyncCallback说它是“异步操作完成时调用的回调方法”。如果操作已经完成,为什么还要调用Socket.EndSend(IAsyncResult)?同时,文档NetworkStream.BeginWrite说“您必须创建一个实现AsyncCallback委托的回调方法并将其名称传递给该BeginWrite方法。您的状态参数至少必须包含NetworkStream.”

但为什么“必须”我呢?我不能只是存储在IAsyncResult某个地方...

...并定期检查是否完成?

(我知道这意味着轮询,但它将在预计大部分时间处于活动状态的服务器中,并且我计划在空闲时进行一些 Thread.Sleeps。)

另一个问题。我发送的消息被分解为一个头数组和一个正文数组。我可以连续发出两个 BeginWrites 吗?

此外,欢迎任何关于是否使用 Socket 或 NetworkStream 的意见。

0 投票
3 回答
238 浏览

c# - 实现基于线路的网络工作者类的正确方法是什么

我正在构建一个 IRC 客户端,并且想要一个 IRC 独立网络类,它只在客户端和服务器之间发送和接收线路。发送线路是可以的,但我不知道实现监听器线程的好方法。我尝试过的所有方法都有效,但都有我无法解决的缺陷。

我的第一种方法是创建一个StreamReader被调用的_readerusingTcpClient.GetStream()作为基础,然后只做一个_reader.ReadLine(). 这样做的好处是后台侦听器线程会自动停止,直到收到一行。问题是,当我断开连接并停止侦听器线程(或应用程序刚刚退出)时,我不确定等待的线程ReadLine()被杀死对于垃圾收集等有多好。线程是否会成为孤立线程并以某种方式留在后台窃取资源?

我的第二种方法是创建一个基于相同的NetworkStream调用,并创建一个循环来检查它,如果它是错误的,则创建一个while循环,否则将字节推送到一个立即检查并提取任何整行的 StringBuilder 中。这在数据检索方面与 ReadLine 的效果相同,但我不喜欢不断循环。在我的 Core i5 CPU 上,它不需要任何 CPU,但在我功能更强大的 i9 笔记本电脑上,它会不断地窃取一个虚拟 CPU。“解决”了这个问题,但似乎是一个肮脏的修复,互联网上的许多文章将其归类为代码异味。_readerTcpClient.GetStream()_reader.DataAvailablecontinue\r\n_reader.DataAvailableThread.Sleep(1)

那么正确的解决方案是什么?

0 投票
1 回答
1482 浏览

c# - 客户端连接断开时的 NetworkStream.BeginRead

我有一个 TCP 客户端流,正在通过异步调用 NetworkStream.BeginRead 读取(传递异步回调委托)。问题是检测连接何时断开。目前,如果连接被切断,BeginRead 调用就会消失在以太中 - 只是不会调用回调。如果应用程序在其关闭时尝试在流上发送,这确实会触发回调并且 NetworkStream.EndRead 会引发异常 - 这没关系 - 但如果没有发出发送,则应用程序只是处于黑暗中,不知道连接已关闭。

最初我看到 NetworkStream.ReadTimout 没有设置(即默认的 Timout.Infinite)——但是设置这个(比如 3000 毫秒)并没有帮助。[编辑:MSDN 文档明确指出,ReadTimeout 仅适用于同步读取调用而不是 asyn BeginRead - 我应该更早地检查一下:-(]

如何检测客户端连接失败?

我是否必须像这个 SO question中所示那样轮询底层套接字?

另外:当物理上重新建立连接时,回调仍然不会被调用——我们只是在以太中等待,直到我们尝试发送。

0 投票
1 回答
1926 浏览

c# - c# SslStream.Read Loop problem

I've been learning C# by creating an app and i've hit a snag i'm really struggling with.

Basicly i have the code below which is what im using to read from a network stream I have setup. It works but as its only reading 1 packet for each time the sslstream.Read() unblocks. It's causes a big backlog of messages.

What im looking at trying to do is if the part of the stream read contains multiple packets read them all.

I've tried multiple times to work it out but i just ended up in a big mess of code.

If anyone could help out I'd appreciate it!

(the first 4bytes of each packet is the size of the packet.. packets range between 8 bytes and 28,000 bytes)

0 投票
5 回答
6826 浏览

finance - 在哪里可以找到高分辨率的财务数据

我正在为股票编写一些机器学习软件,并希望找到一些刻度数据或至少 3 或 5 分钟的数据。

我希望有一两年的时间进行测试。

我真的不关心数据来自什么交换,只要它来自某个地方的主要交换。

还有什么地方可以连接到延迟的“实时”数据的数据流?

数据不一定是免费的,但免费更好:-)

0 投票
2 回答
2122 浏览

c# - NetworkStream.Write 阻塞到什么时候?

我能想到这些可能的答案:

  • 直到数据被写入 IP 堆栈中的某个内部缓冲区。
  • 直到数据通过网络发送。
  • 直到收到来自另一台机器的接收确认。
0 投票
1 回答
1376 浏览

sockets - Windows Phone 7.1 芒果和 NetworkStream。是否包括在内?有什么好的选择吗?

芒果 SDK 中不包含 NetworkStream 类吗?它似乎不在 System.Net 程序集中,但可能在其他地方。如果它不可用(我想知道为什么)什么是一个好的选择?最好的方法是自己实现它吗?