-2

我能够建立与 bacnet 路由器的串行端口通信。

一切都很好,我可以更改路由器的名称等。

但是当我写入 IP 地址时: 我的代码:

serialPort1.WriteLine("10.1.1.168");
//or 
serialPort1.Write("10.1.1.168"); 
//It stores as '0.0.0.10' 

或者:

serialPort1.WriteLine("145.100.100.168"); //it stores as '0.0.0.145'

或者:

serialPort1.WriteLine("145100100168"); //Im reaching lol

我可以更改,例如路由器名称:

serialPort1.WriteLine("Project1234"); //and it stores perfectly

我已经完成了转换(二进制、十六进制、ipAddress),但它仍然存储了一个错误的值。

有任何想法吗?谢谢你的帮助!!

更新 - 好的,这就是我到目前为止所拥有的:

IPAddress ip = IPAddress.Parse(txtWrite.Text);
Byte[] bytes = ip.GetAddressBytes();
for (int i = 0; i < bytes.Length; i++)
{
    string str = bytes[i].ToString();
    MessageBox.Show(str);
    serialPort1.Write(str+".");
 }
 serialPort1.Write("\r\n");

但问题是,如果超过 3 位数字“192.168.168.5”,它将不会添加“。” 导致“1921681685”。(注意最后的小数点?)但是如果我输入“10.1.1.168”,它会存储为“10.1.1.168”并且最后没有小数点,这是我想要或需要的那个 IP 地址。我究竟做错了什么??

谢谢你的帮助。

4

3 回答 3

1

我想这根本与波特率或设置无关。只是我们不知道如何指定IP地址?

在您的最后一次更新中,尝试构建一个 if 以便最后一部分不发送“。”。

IPAddress ip = IPAddress.Parse(txtWrite.Text);
Byte[] bytes = ip.GetAddressBytes();
for (int i = 0; i < bytes.Length; i++)
{
    string str = bytes[i].ToString();
    MessageBox.Show(str);
    if(i < bytes.Length - 1)//Try this out
    {
        serialPort1.Write(str+".");
    }
 }
 serialPort1.Write("\r\n");

类似的东西。如果我理解的话,每个 x(在 xxxx 中)都存储在变量字节中?我认为您也在最后一个 x 之后发送一个点,所以我认为这并不常见。

于 2013-04-16T07:17:34.020 回答
0

SerialPort-Constructor不知道并期望IPAdress

字符串参数不是IP 地址!例如“COM1”。这就是“Project1234”有效的原因。

编辑:

你显然混合了不同的东西:

  • 在计算中,串行端口是一种串行通信物理接口,信息通过它一次一位地传入或传出。(维基百科)
  • 在计算中,并行端口是并行通信的物理接口。它也称为打印机端口或 Centronics 端口。(维基百科)

这两个接口都与IP地址完全无关!

您在谈论 IP 地址,这意味着您想通过TCP/IP协议建立连接。一个好的开始是:使用 C# 的 TCP/IP 聊天应用程序

编辑(2):USB串行通信确实是串行的,但又不是您尝试访问的串行端口。对于 USB 通信,有一些库。LeitnerSharpDevelop

于 2013-04-13T08:03:44.460 回答
0

感谢你的帮助。我想通了,这与字符串的类型无关……这是字符串输入路由器的时间。

foreach (char c in txtWrite.Text)
{
    serialPort1.WriteLine(c.ToString());
    System.Threading.Thread.Sleep(100);

 }
 serialPort1.WriteLine("\r\n");

就这样。

于 2013-04-16T13:57:43.023 回答