我现在正在开发一个电池监控程序,目前遇到了一个很大的难题需要在此求助大家帮忙。  
问题如下:  
         1、厂家已经给我提供了软件开发的协议,例如检测控制单元通信是否成功的协议指令是  :BBH  0    0  44H  通信正确的话,返回80H,否则返回:81H,    
         2、我现在已经能够通过Socket编程的方式,访问串口服务器的端口。而且有返回值(通过调试可知)。但是结果返回的不是16进制数据,好像是一些符号比如一个方块等。问题是如何通过写代码才能够让程序给我返回这个80H和81和呢  现在问题卡在这里了。希望大家帮帮我。最好给我几行实例代码。  
         3、我在开发中应该采用同步还是异步通讯???哪一种更好??  
           
 
       我最关心的是第二个问题。      
   这个返回80H的代码怎么写呀    怎样才能返回这个80H呢??在发送控制指令的时候是用一个字节数组的形式发的。  
   需不需要在发送的时候在指令的前后加上什么东西以示区别??    读取结果的时候怎么取出正确的结果?  
 

解决方案 »

  1.   

    呵呵,今天浏览到这个老问题。
    1.发送问题
    byte[] myCommand = System.Text.Encoding.ASCII.GetBytes("\xbb\x00\x00\x044");
    ns.Write( myCommand , 0, myCommand .Length );  //NetworkStream ns; ns = yourClient.GetStream();
    2.你看到的是80H或81H所代表的字符,只需要定义一个byte变量直接等于它即可
    byte tempByte;
    tempByte=返回值;//tempByte.tostring()即为字符串“80”或“81”
    3.不管是Socket还是串行通信最好都采用异步方式
      

  2.   

    发送和传输都是以byte为单位的。80h就是
    byte bb = (byte) 0x80;Socket的所有接收方法都是接收byte[]的,不知道你怎么接收到了字符。
      

  3.   

    关于异步通信。.Net的Socket支持一系列异步和同步的方法。
    异步方法都是以Begin开头的一系列方法。
    异步同与同步的区别在于:
    以服务器端对监听Socket进行处理连入请求为例同步:Accept的处理在同一线程中(除非你自己去实现多线程)。异步:BeginAccept和EndAccept是Socket.Accept的异步版本。
    支持在单独线程中进行处理。比如说你可以收到一个连入请求以后,单独的开启一个线程。专门
    为该连接提供服务。至于具体选用什么方案,要看你的项目是什么样的。:)