我正在创建一个套接字服务器,该服务器需要持续侦听来自连接客户端的传入消息。这些消息将以byte[]数组的形式发送。我让服务器与StreamReader配合得很好,但StreamReader只适用于发送数据的文本表示。。。而不是byte[]数组。
以下是我所拥有的:
StreamReader reader = new StreamReader(Client.GetStream());
string line = "";
while (true)
{
line = reader.ReadLine();
if (!string.IsNullOrEmpty(line))
{
parentForm.ApplyText(line + "rn");
SocketServer.SendBroadcast(line);
}
}
我现在需要将其转换为原始流,以某种方式将流内容转换为byte[]数组,但我似乎无法处理它。
我试过这个:
while (true)
{
var bytes = default(byte[]);
using (var memstream = new MemoryStream())
{
var buffer = new byte[512];
var bytesRead = default(int);
while ((bytesRead = reader.BaseStream.Read(buffer, 0, buffer.Length)) > 0)
memstream.Write(buffer, 0, bytesRead);
bytes = memstream.ToArray();
}
//parentForm.ApplyText(bytes.Length + "rn");
}
但正如你所猜测的,while(true)循环并不能完全按照我的需要工作。有人能帮我调整一下代码吗?让它按照我的要求工作。它需要不断地监听传入的消息,然后当收到消息时,它需要对该消息(byte[]数组)做些什么,然后重新开始监听。
TIA
我想"持续倾听"不是读者的任务,而是听众的任务。当我使用TcpListener编写服务器时,也遇到了同样的问题。我不确定你想做什么,但我正在发布你的"连续听"one_answers"读字节"问题的解决方案。我想这个代码可能会帮助你:
TcpListener t = new TcpListener(IPAddress.Loopback, _port);
t.Start();
Console.WriteLine("Server is started and waiting for clientnn");
byte[] buff = new byte[255];
NetworkStream stream;
TcpClient client;
while(true)
{
client = t.AcceptTcpClient();
if (!client.Connected)
return;
stream = client.GetStream();
while ((stream.Read(buff, 0, buff.Length)) != 0)
{
break;
}
if (0 != buff.Length)
break;
}
不需要转换任何内容。GetStream()
返回NetworkStream。请参阅Microsoft在NetworkStream.Read方法中包含的示例。您所要做的就是用适当的存储机制替换myCompleteMessage.AppendFormat("{0}", Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead));
行。