gpt4 book ai didi

c# - 如何使用C#套接字发送内存流?

转载 作者:行者123 更新时间:2023-12-03 12:08:10 26 4
gpt4 key购买 nike

我正在尝试为服务器套接字编写一个代码,该代码使用MemoryStream通过网络发送System.Net.Sockets的内容。我尝试了下面的代码以发送内存流的内容,该内容不为null,但该程序无法正常工作。代码有什么问题,我该如何解决?如果还有其他方法可以帮助我?

客户端的C#代码:

    using (var ms = new MemoryStream())
{
byte[] buffer = new byte[1024];
int read = 0;
while ((read = NetStream.Read(buffer, 0, 1024)) != 0)
{
ms.Write(buffer, 0, read);
}
ms.Position = 0;
stream.Close();
client.Close();
return ms;
}

服务器的C#代码:
            byte[] buffer = new byte[1024];
MemoryStream ms = new MemoryStream();
ms = response; //response is also NOT null MemoryStream
ms.Position = 0;

int read = 0;
while ((read = ms.Read(buffer, 0, 1024)) != 0)
{
stream.Write(buffer, 0, read);
}
ms.Close();
response.Close();
stream.Flush();
Console.WriteLine("DONE.");

调试器的结果:服务器立即继续执行程序,客户端卡住。

注意:此答案中的代码ID: DataSet & NetworkStream in C#

最佳答案

我已经通过这里的答案解决了这个问题:

首先,等待来自发送方的数据(适用于两个循环),
其次,在读取后检查是否有更多数据可用。这样,它就不会无所事事。

while (true)
{
if (clientStream.DataAvailable)
{
while ((i = clientStream.Read(bytesBuffer, 0, bytesBuffer.Length)) != 0)
{
memoryStream.Write(bytesBuffer, 0, bytesBuffer.Length);
if (clientStream.DataAvailable)
continue;
else
break;

}
Console.WriteLine("Received from server {0}", Encoding.ASCII.GetString(memoryStream.ToArray()));
break;
}
else
{
continue;
}
}

谢谢!

关于c# - 如何使用C#套接字发送内存流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54636862/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com