草庐IT

NetworkStream

全部标签

c# - 为什么从 NetworkStream 加载 XML 时服务器会阻塞?

我有一个简单的C#客户端和服务器。目标是客户端向服务器发送一个XML文档,然后服务器应以不同的XML文档响应。当我尝试使用XmlDocument.Load(NetworkStream)接收输入/请求XML时,服务器正在阻塞。服务器:TcpListenert=newTcpListener(IPAddress.Any,4444);t.Start();TcpClientc=t.AcceptTcpClient();NetworkStreams=c.GetStream();XmlDocumentreq=newXmlDocument();req.Load(s);stringrespString="

c# - 指定的参数超出范围 C#

我是C#的新手,所以我不知道为什么在Windows7中我的应用程序(程序)可以完美运行,而在WindowsServer2012上我在尝试从客户端获取消息时出现此错误。C#。错误:system.argumentOutOfRangeException:Specifiedargumentwasoutoftherangeofvalidvalues.Parametername:Size.atsystem.net.sockets.networkStream.Read(Byte[]buffer,int32offset,int32size)发送函数:byte[]outStream=System.Tex

.net - 为什么即使在 NetworkStream.EndRead 返回 0 字节后我仍然接收数据?

我正在使用NetworkStream.BeginRead/EndRead从套接字进行异步读取。但是,NetworkStream.EndRead()有时会返回0(即从套接字读取了0个字节),我认为这表明套接字已关闭,但事实并非如此,因为如果我继续调用BeginRead()最终我会收到更多数据。这不是从套接字/NetworkStream连续读取数据的正确循环吗?voidBeginContinousRead(){//StartthecontinousasyncreadmStream.BeginRead(mDataBuffer,0,mDataBuffer.Length,newAsyncCall

c# - TcpClient.GetStream().DataAvailable 返回 false,但流有更多数据

因此,阻塞的Read()似乎可以在完成接收所有发送给它的数据之前返回。反过来,我们用一个循环包装Read(),该循环由相关流中的DataAvailable值控制。问题是您可以在此while循环中接收更多数据,但没有后台处理继续让系统知道这一点。我在网上找到的大多数解决方案都不适用于我。我最终做的是作为我循环的最后一步,我在从流中读取每个block后执行一个简单的Thread.Sleep(1)。这似乎让系统有时间更新,我没有得到准确的结果,但这似乎有点老套,而且对于解决方案来说有点“间接”。以下是我正在处理的情况的列表:IIS应用程序和独立应用程序之间的单个TCP连接,两者都是用C#编写

c# - 将 Socket.ReceiveAsync 替换为 NetworkStream.ReadAsync(可等待)

我有一个应用程序可以同时建立几百个TCP连接,并从它们接收源源不断的数据流。privatevoidstartReceive(){SocketAsyncEventArgse=newSocketAsyncEventArgs();e.Completed+=receiveCompleted;e.SetBuffer(newbyte[1024],0,1024);if(!Socket.ReceiveAsync(e)){receiveCompleted(this,e);}}voidreceiveCompleted(objectsender,SocketAsyncEventArgse){ProcessD

c# - 如何在不关闭流的情况下取消 NetworkStream.ReadAsync

我正在尝试使用NetworkStream.ReadAsync()来读取数据,但我找不到如何在调用后取消ReadAsync()。对于背景,NetworkStream由连接的BluetoothClient对象(来自32Feet.NET蓝牙库)提供给我。我正在尝试的当前get-it-working代码如下。intbytesRead;while(this.continueReading){bytesRead=awaitthis.stream.ReadAsync(this.buffer,0,(int)this.buffer.Length);Console.WriteLine("Received{

c# - 如何(重复)从 .NET SslStream 读取超时?

我只需要阅读N来自SslStream的字节但如果在超时之前没有收到任何字节,则取消,同时让流保持有效状态以便稍后重试。(*)这对于非SSL流很容易完成,即NetworkStream只需使用它的ReadTimeout使流在超时时抛出异常的属性。不幸的是,这种方法不适用于SslStream根据官方文档:SslStreamassumesthatatimeoutalongwithanyotherIOExceptionwhenoneisthrownfromtheinnerstreamwillbetreatedasfatalbyitscaller.ReusingaSslStreaminstance

C#:实现 NetworkStream.Peek?

目前,C#中没有NetworkStream.Peek方法。实现这种功能与NetworkStream.ReadByte类似的方法的最佳方法是什么,只是返回的byte实际上并未从Stream中删除? 最佳答案 我遇到了同样的“查看魔数(MagicNumber)然后决定将流发送到哪个流处理器”的要求,不幸的是我无法摆脱这个问题-正如对Aaronaught的回答的评论中所建议的那样-通过传递已经在单独的参数中将字节消耗到流处理方法中,因为这些方法是给定的,他们期望System.IO.Stream而不是其他。我通过创建一个或多或少通用的包装流

c# - 如何在单元测试中最小化 NetworkStream?

我使用Moq和NUnit作为单元测试框架。我写了一个方法,将NetworkStream对象作为参数:publicstaticvoidReadDataIntoBuffer(NetworkStreamnetworkStream,QueuedataBuffer){if((networkStream!=null)&&(dataBuffer!=null)){while(networkStream.DataAvailable){byte[]tempBuffer=newbyte[512];//readthedatafromthenetworkstreamintothetemporarybufferI

c++ - 带有内存定位文件的 FFmpeg avformat_open_input

我想解码互联网音频流,但我不想将数据写入磁盘,因此数据仅位于内存中。但是当我想将数据解码为原始数据时,我必须初始化格式上下文,所以我需要使用avformat_open_input。但是这些功能需要文件的详细位置。有没有人有解决方案,如何将我的内存定位数据放入格式上下文中以将此数据解码为原始数据? 最佳答案 您必须创建自定义AVIOContext。详情见我对PlayaVideofromMemoryStream,UsingFFMpeg的回答 关于c++-带有内存定位文件的FFmpegavfo