Tag: networkstream

TCP客户端\服务器 – 客户端并不总是读取

客户代码: TcpClient client = new TcpClient(); NetworkStream ns; private void Form1_Load(object sender, EventArgs e) { try { client.Connect(“127.0.0.1”, 560); ns = client.GetStream(); byte[] buffer = ReadFully(ns, client.Available); //working with the buffer… } catch { //displaying error… } } public static byte[] ReadFully(NetworkStream stream , int initialLength) { // If we’ve been passed an unhelpful initial […]

TcpClient.GetStream()。DataAvailable返回false,但stream有更多数据

因此,似乎阻塞的Read()可以在接收到发送给它的所有数据之前返回。 反过来,我们用一个循环包装Read(),该循环由相关流中的DataAvailable值控制。 问题是你可以在这个while循环中接收更多数据,但是没有幕后处理让系统知道这一点。 我在网上找到的大部分解决方案都不适用于我。 我最后做的是作为循环的最后一步,我从流中读取每个块后做一个简单的Thread.Sleep(1)。 这似乎给系统提供了更新的时间,而且我没有得到准确的结果,但这对于解决方案来说似乎有点苛刻且有点“间接”。 以下列出了我正在处理的情况:IIS应用程序和独立应用程序之间的单个TCP连接,都是用C#编写的,用于发送/接收通信。 它发送请求然后等待响应。 此请求由HTTP请求启动,但我没有从HTTP请求中读取数据这个问题,事后是这样。 以下是处理传入连接的基本代码 protected void OnClientCommunication(TcpClient oClient) { NetworkStream stream = oClient.GetStream(); MemoryStream msIn = new MemoryStream(); byte[] aMessage = new byte[4096]; int iBytesRead = 0; while ( stream.DataAvailable ) { int iRead = stream.Read(aMessage, 0, aMessage.Length); iBytesRead += iRead; msIn.Write(aMessage, 0, iRead); Thread.Sleep(1); } MemoryStream msOut = […]

如何从NetworkStream获取所有数据

我试图读取通过TCP/IP连接的机器缓冲区中存在的所有数据,但我不知道为什么我没有得到所有数据,一些数据正在错过。 这是我正在使用的代码.. using (NetworkStream stream = client.GetStream()) { byte[] data = new byte[1024]; int numBytesRead = stream.Read(data, 0, data.Length); if (numBytesRead > 0) { string str= Encoding.ASCII.GetString(data, 0, numBytesRead); } } 请告诉我我缺少什么来从机器获取所有数据。 提前致谢..