有个一c++写的程序,用来控制第三方设备,我想通过c#写程序,通过com口两台电脑连接起来,用哪个程序发命令,另一台电脑用C#程序接收,可是接收到的都是“?”,问题出在哪? 有什么需要注意的地方吗?

解决方案 »

  1.   

    默认serialport类中使用的编码是ASCII的,对于大于127的值,转换成ASCII时都会变成?
    你最好注意下,试着把Encoding转换成UTF8的。
    PS:你一定要知道C++写的那个程序是用UTF8编码的还是ASCII编码的。虽然传输的都是二进制,但是将字符转换成二进制或者反过程的时候跟编码是有关的。MSDN中有关于serialport的编码的描述的。
    SerialPort.Write 方法 (String) 中的“备注”中有如下描述:
    当您想将字符串作为串行端口输出写入时,请使用此方法。如果输入缓冲区中的字节数太多,并且 Handshake 设置为 XOnXOff,则 SerialPort 对象可能会在等待设备准备接受更多数据的过程中引发 TimeoutException。默认情况下,SerialPort 使用 ASCIIEncoding 对字符进行编码。ASCIIEncoding 将所有大于 127 的字符编码为 (char)63 或“?”。若要支持该范围中的其他字符,请将 Encoding 设置为 UTF8Encoding、UTF32Encoding 或 UnicodeEncoding。
    ======================================================================================
    你的C#程序用作接收端,所以你需要在将二进制(或者说十六进制)转换成字符时注意编码的问题,否则很容易造成乱码的情况。
    希望能对你有所帮助。
    PS:希望楼主平时多注意MSDN。
      

  2.   

    问题解决了,就是两个程序编码不同的原因,谢谢了啊 各位师傅。
    不过还有一个问题 为什么com口在在两台电脑上通讯时 ,包括自己写的一个非常简答的程序,还有网上下载的端口测试程序。只有在com口针 2-3 3-2 连起来的时候 才能收发数据,如果将电脑所有的针连接起来,就收不到。这是为什么啊?