为什么writeline不会停在/ r?

时间:2017-09-25 14:40:59

标签: c#

我正在使用C#Microsoft visual studio professional 2013。 我在写:

[0] 0 '\0'  char
[1] 1 ''    char
[2] 0 '\0'  char
[3] 0 '\0'  char
[4] 0 '\0'  char
[5] 8 '\b'  char
[6] 1 ''    char
[7] 3 ''    char
[8] 0 '\0'  char
[9] 0 '\0'  char
[10]    65535 '.'   char
[11]    65534 ''    char
[12]    0 '\0'  char
[13]    0 '\0'  char
[14]    13 '\r' char

但我的最终计划只是看到了 0 1 0 0 0 8 1 3 0 它没有看到整个信息。我正在写一个名为Modbus Master的程序。这会向我的代码发送数据请求,我的代码会回复。我收到了Modbus Master的完整信息,但它没有从我的代码中获得完整的按摩。

这是我的代码:

 void Listener_function()
    {
        IPHostEntry host;
        string localIP = "?";
        host = Dns.GetHostEntry(Dns.GetHostName());

        TcpListener listener = null;
        try
        {
            listener = new TcpListener(IPAddress.Parse(Moxa_IPtxt.Text), Convert.ToInt16(modemPorttxt.Text));
            listener.Start();
            // ErrorBox.Text = " EchoServer started ... /n";
            MessageBox.Show(" waiting for incoming client connections.../n /r");
            TcpClient client = listener.AcceptTcpClient();
            MessageBox.Show(" Accepted new client coneection ...");
            StreamReader reader = new StreamReader(client.GetStream());
            StreamWriter writer = new StreamWriter(client.GetStream());

            while (true)
            {

                string s = string.Empty;
                char[] temp = new char[12];
                int s1 = reader.Read(temp, 0, 12);
                int Registers_number = (((int)temp[10] << 8) + (int)temp[11]);
                int Message_Size = (Registers_number * 2) + 8;
                char[] Message3 = new char[Message_Size];
                TCPProcessing(temp, Message3);
                if (writeData == true) { 
                writer.Write(Message3);
                writer.Flush();
            }
              /*  reader.Close();
                writer.Close();
                client.Close();  */
            }
        }
        catch (Exception e)
        {
            MessageBox.Show(e.ToString());
            //ErrorBox.Text = e.ToString();
        }
        finally
        {
            if (listener != null)
            {
                listener.Stop();
            }

        }
    }

消息3是一个大小为30的全局数组。

private void Form1_Load(object sender, EventArgs e)
    {
        tag = new List<Tag>();
        Tagcall = new List<tagcall>();
        Message3 = new char[30]; }

为什么写信不会停在/ r?

1 个答案:

答案 0 :(得分:0)

我发现您的代码存在多个问题:

  • 首先你告诉我们你正在写15个字节(第一个片段),但你一次只想读12个(static getUsers(axios, params={}) { return axios.get("users", {params}) }

  • char[] temp = new char[12];当您保存读取的字节数时,如果您已经读取了足够的数据来开始处理它,那么您永远不会检查

最后Streamwriter.WriteLine写入,直到遇到TextWriter.CoreNewLine字符。如果您的系统为int s1 = reader.Read(temp, 0, 12);,它将正确停止。如果你想写所有或你的char [],你应该使用StreamWriter.Write(char[])