有个一c++写的程序,用来控制第三方设备,我想通过c#写程序,通过com口两台电脑连接起来,用哪个程序发命令,另一台电脑用C#程序接收,可是接收到的都是“?”,问题出在哪? 有什么需要注意的地方吗?
解决方案 »
- 如何动态叠加button到splitter顶端?
- 请教一下有关UDP的通信问题,在局域网的两台机上测试成功,但在服务器上就不成功
- 用sql 实现:输入一个数,如13,然后可以计算出他是由哪几组正整数相加而成,三个正整数不能重复
- datagrid.ReadOnly=True,如何做到编辑datagrid中选中的某一行,其他行为只读
- 请问:如何在一个窗体中去激发另一个窗体中的事件??
- 超级菜鸟的留言板问题
- 谁能把这几句VB翻译成C#???????????????????????????????????????????????????
- 编译时报错,这怎么数据类型转换????
- 大家告诉我vs2005有那些三方插件啊?想要好看的控件
- 请教:textBox1中数值如何显示为金额形式?例如"1234"显示为"1,234.00",请给出详细语句。谢谢!
- 求拆分身份证住址的方法
- 电脑com口与第三方设备的com不一致怎么办?比如电脑com口名字是com9,而设备用的是com1,怎么办?
你最好注意下,试着把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。
不过还有一个问题 为什么com口在在两台电脑上通讯时 ,包括自己写的一个非常简答的程序,还有网上下载的端口测试程序。只有在com口针 2-3 3-2 连起来的时候 才能收发数据,如果将电脑所有的针连接起来,就收不到。这是为什么啊?