C# TCP/IP 消息正在更改
C# TCP/IP message is being changed
我正在使用 Microsoft Visual Studio 2013 专业版 C# 编写我的程序。我使用了调试器并查看了名为 Message3 的数组,它有正确的信息,但是当它到达连接的计算机 modbus 程序时,消息是不同的。所以我使用了 Wireshark 并且 wireshark 与 Modbus 程序一致。这很奇怪,因为它只对某些值这样做
就像 modbus 中的值 7600 一样,它在两个寄存器中作为 29 和 176 发送出去,我的程序在数组中有这个值,但 wireshark 看到的是 29 194 176。
它以某种方式添加了一个不在我的数组中的 194。
[0] 0 '[=11=]' char
[1] 4 '' char
[2] 0 '[=11=]' char
[3] 0 '[=11=]' char
[4] 0 '[=11=]' char
[5] 5 '' char
[6] 1 '' char
[7] 3 '' char
[8] 2 '' char
[9] 29 '' char
[10] 176 '°' char
这就是我的调试器所具有的,这是 wire shark 所看到的:
0 4 0 0 0 6 1 3 0 5 0 1 03 02 1d c2 b0
我都试过了:writer.Flush 和 writer.FlushAsync 但没有任何帮助。
同样,它也只是这样做的一些值。
这是我的代码:
void Listener_function()
{
IPHostEntry host;
string localIP = "?";
host = Dns.GetHostEntry(Dns.GetHostName());
listener = null;
try
{
listener = new TcpListener(IPAddress.Parse(Moxa_IPtxt.Text), Convert.ToInt16(modemPorttxt.Text));
listener.Start();
// ErrorBox.Text = " EchoServer started ... /n";
connect_flag = true;
MessageBox.Show(" waiting for incoming client connections.../n /r");
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) + 9;
char[] Message3 = new char[Message_Size];
TCPProcessing(temp, Message3);
if (writeData == true)
{
writer.Write(Message3);
// writer.Flush();
writer.FlushAsync();
}
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
//button1.Text = "Connect";
//ErrorBox.Text = e.ToString();
}
finally
{
if (listener != null)
{
listener.Stop();
}
}
}
有什么想法吗?
我在 FlushAsync 之后再次在 } 处设置了一个断点,我复制了包含的消息但它没有 194(请参见上文)
Brandon,你好像没仔细看我写的东西。
don't use StreamReader/StreamWriter which are for text operations. Use directly client.GetStream
这是给你看的代码
var m = new MemoryStream();
var wr = new StreamWriter(m);
wr.Write(new char[] { (char)29, (char)176 }, 0, 2);
wr.Flush();
var bytes2 = m.ToArray();
bytes2 的内容是:29,194,176 与您的情况一样。所以我重复一遍,使用 client.GetStream,而不是 StreamReader/StreamWriter
我正在使用 Microsoft Visual Studio 2013 专业版 C# 编写我的程序。我使用了调试器并查看了名为 Message3 的数组,它有正确的信息,但是当它到达连接的计算机 modbus 程序时,消息是不同的。所以我使用了 Wireshark 并且 wireshark 与 Modbus 程序一致。这很奇怪,因为它只对某些值这样做 就像 modbus 中的值 7600 一样,它在两个寄存器中作为 29 和 176 发送出去,我的程序在数组中有这个值,但 wireshark 看到的是 29 194 176。 它以某种方式添加了一个不在我的数组中的 194。
[0] 0 '[=11=]' char
[1] 4 '' char
[2] 0 '[=11=]' char
[3] 0 '[=11=]' char
[4] 0 '[=11=]' char
[5] 5 '' char
[6] 1 '' char
[7] 3 '' char
[8] 2 '' char
[9] 29 '' char
[10] 176 '°' char
这就是我的调试器所具有的,这是 wire shark 所看到的: 0 4 0 0 0 6 1 3 0 5 0 1 03 02 1d c2 b0
我都试过了:writer.Flush 和 writer.FlushAsync 但没有任何帮助。 同样,它也只是这样做的一些值。 这是我的代码:
void Listener_function()
{
IPHostEntry host;
string localIP = "?";
host = Dns.GetHostEntry(Dns.GetHostName());
listener = null;
try
{
listener = new TcpListener(IPAddress.Parse(Moxa_IPtxt.Text), Convert.ToInt16(modemPorttxt.Text));
listener.Start();
// ErrorBox.Text = " EchoServer started ... /n";
connect_flag = true;
MessageBox.Show(" waiting for incoming client connections.../n /r");
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) + 9;
char[] Message3 = new char[Message_Size];
TCPProcessing(temp, Message3);
if (writeData == true)
{
writer.Write(Message3);
// writer.Flush();
writer.FlushAsync();
}
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
//button1.Text = "Connect";
//ErrorBox.Text = e.ToString();
}
finally
{
if (listener != null)
{
listener.Stop();
}
}
}
有什么想法吗?
我在 FlushAsync 之后再次在 } 处设置了一个断点,我复制了包含的消息但它没有 194(请参见上文)
Brandon,你好像没仔细看我写的东西。
don't use StreamReader/StreamWriter which are for text operations. Use directly client.GetStream
这是给你看的代码
var m = new MemoryStream();
var wr = new StreamWriter(m);
wr.Write(new char[] { (char)29, (char)176 }, 0, 2);
wr.Flush();
var bytes2 = m.ToArray();
bytes2 的内容是:29,194,176 与您的情况一样。所以我重复一遍,使用 client.GetStream,而不是 StreamReader/StreamWriter