程序的要求是通过串口控制猫,使两台电脑能够通过猫连接,并能够互相发送消息及文件。
现在遇到了严重的问题,快崩溃了,赶来紧急求助
1:两个猫,分别为A,B(不一样),写了一个程序,按拨号按钮(即使直接发送AT命令)时,B猫正常,A猫提则示ERROR,但是用附件的超级终端发送相同的命令时却可以拨号,没有问题。
2:A边用超级终端,B端用自己写的程序,可以实现连接,但是两边都无法接收对方发的任何消息!如果两边都用超级终端时可以接收消息
3.我的串口的timeout设置为-1,是不是这个的问题?
部分代码如下
拨号        private void button1_Click(object sender, EventArgs e)
        {
            serialPort1.Write("atd" + num.Text  + System.Convert.ToChar(13).ToString() + System.Convert.ToChar(10).ToString());
        }发送AT命令(兼作发送消息的按钮)        private void message_Click(object sender, EventArgs e)
        {
            timer1.Enabled = false;
            serialPort1.Write(sbox.Text + System.Convert.ToChar(13).ToString() + System.Convert.ToChar(10).ToString());
            Thread.Sleep(300);
            byte[] data = new Byte[serialPort1.BytesToRead];
            serialPort1.Read(data, 0, data.Length);
            string response = System.Text.Encoding.ASCII.GetString(data);
            this.rbox.Invoke(new EventHandler(delegate
            { rbox.AppendText(response); rbox.ScrollToCaret(); }));
            timer1.Enabled = true;
        }用定时器轮询消息的        private void timer1_Tick(object sender, EventArgs e)
        {
            byte[] data = new Byte[serialPort1.BytesToRead];
            serialPort1.Read(data, 0, data.Length);
            string response = System.Text.Encoding.ASCII.GetString(data);
            if (response.Contains("\r\n"))
            {
                if (response.Contains("begin") && response.Contains("stop"))
                {
                    temp = response;
                    t = new Thread(new ThreadStart(ReceiveFile));
                    t.Start();   
                }
                else
                {
                    this.rbox.Invoke(new EventHandler(delegate
                { rbox.AppendText(response); rbox.ScrollToCaret(); }));
                }
            }
        }

解决方案 »

  1.   

    http://topic.csdn.net/t/20021026/10/1126602.html
      

  2.   

    不过还真不知道2个猫可以。貌似真可以?
    算了,这古董,不管了。试试这样修改。
    你修改timer的enabled不行的。你修改的时候如果timer正在操作,你就会错过一次数据,造成并发读操作丢失返回结果。bool listen = false;
    private void message_Click(object sender, EventArgs e)
    {
    listen = true;
    timer1.Enabled = false;
    serialPort1.Write(sbox.Text + System.Convert.ToChar(13).ToString() + System.Convert.ToChar(10).ToString());
    Thread.Sleep(300);
    byte[] data = new Byte[serialPort1.BytesToRead];
    serialPort1.Read(data, 0, data.Length);
    string response = System.Text.Encoding.ASCII.GetString(data);
    this.rbox.Invoke(new EventHandler(delegate
    { rbox.AppendText(response); rbox.ScrollToCaret(); }));
    timer1.Enabled = true;
    listen = false;
    }private void timer1_Tick(object sender, EventArgs e)
    {
    if(listen) return;
    byte[] data = new Byte[serialPort1.BytesToRead];
    serialPort1.Read(data, 0, data.Length);
    string response = System.Text.Encoding.ASCII.GetString(data);
    if (response.Contains("\r\n"))
    {
    if (response.Contains("begin") && response.Contains("stop"))
    {
    temp = response;
    t = new Thread(new ThreadStart(ReceiveFile));
    t.Start();   
    }
    else
    {
    this.rbox.Invoke(new EventHandler(delegate
    { rbox.AppendText(response); rbox.ScrollToCaret(); }));
    }
    }
    }
      

  3.   


    serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);先简单化问题
      

  4.   

    尝试不使用轮询机制来读取数据。
    同时,发送命令等待应答的方式稍微的修改一点。
    诶,偷懒好久了。看来要吧这个系列补全……
    还差
    ascii分析
    ascii,binary混合分析
    引入的抽象分析类,提供命令发送等待应答和界面互斥的方法
    蓝牙,网络的整合
    最终的“万金油”通讯库
    硬件到软件之间的中间层
    创建自己的三层架构通讯程序,稳定,利于扩展的开发。
    好多……C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。 
    C# 串口操作系列(2) -- 入门篇,为什么我的串口程序在关闭串口时候会死锁 ? 
    C# 串口操作系列(3) -- 协议篇,二进制协议数据解析 
      

  5.   

    哇,LS列举的东西好多啊,
    回12L,那句话要用到什么库啊?提示找不到SerialDataReceivedEventHandler