为将包含 byte[] 数组的传入套接字流创建"listener"



我正在创建一个套接字服务器,该服务器需要持续侦听来自连接客户端的传入消息。这些消息将以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));行。

相关内容

  • 没有找到相关文章

最新更新