串口通信和IP地址

时间:2013-04-13 06:18:02

标签: c# winforms serial-port

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

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

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

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

OR:

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

OR:

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地址。我做错了什么?

感谢您的帮助。

3 个答案:

答案 0 :(得分: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(在x.x.x.x中)都存储在变量字节中?我认为你也会在最后一个x之后发一个点,所以我认为这种情况并不常见。

答案 1 :(得分:0)

SerialPort-Constructor不知道并期望IPAdress

字符串参数是 NOT 一个ip地址!例如“COM1”。这就是“Project1234”的原因。

编辑:

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

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

两个界面都与IP地址完全无关!

您正在谈论IP地址,这意味着您希望通过TCP/IP协议建立连接。一个好的开始是:TCP/IP Chat Application Using C#

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

答案 2 :(得分:0)

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

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

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

就是这样。