首页 新闻 搜索 专区 学院

C# WebServices接口供C++调用数据包难题

0
悬赏园豆:40 [已关闭问题]

现在要用C# 做一个WebServices作一个接口供C++调用
   WebServices已经定义好了(这里只说明了一种最简单的Web方法,至于安全性验证全都省略了):
   void Process(byte[] Request, out byte[] Response)(这个参数不可能变的)
   参数说明:接收参数byte[]型,输出结果参数byte[],我根据接收到的Request参数,返回结果数据Respone

Request/Response的包格式如下:


也就是说c++那边解包必须按照这种包的格式去做,因为C++那边和蓝牙通信的协议都已经定义好所以只能用这种格式解包
了,由于以前接触到这种数据包的传输知识很少,不知道该怎么去组包,在这里请问高手了:

比如:
接收到一个参数数据包          request:  请求代码(102)、包长度(5)、请求包数据("12")
通过逻辑处理返回数据包:       response:回应代码(200)、包长度(30)、回应包数据("我是一个persion")

我现在要问的是:
1、怎么去把请求数据包解压成字符串,去得到我的想要的参数
2、怎么样把我的返回数据(回应代码、包长度、回应包数据)组成一个数据包发给C++那边
3、高手们给我解释下数据包到底是什么概念应该怎么转换成数据包

这两天大概问了下说用什么 C#里面的buffer[]数据传过去,但那玩间真没用过!!还有种说是用Arraylist.CopyTo()把数据
压入buffer[],可这些技术都不太明白

我就想如果我把各回应数据组成字符串再强制转换成byte[],后面考虑了下这样应该是不行的

问题补充: 问题解决了,贴下代码: //压包过程 string dataContent = "abcdefg我人间中国人"; //数据包内容 Int16 pack_Len = (Int16)(dataContent.Length * 2 + 2 + 2); //数据包长度(回应码长度+自身长度+数据包长度) Int16 backCode = 101; //回应码 byte[] buf = new byte[pack_Len]; //定义Byte数组 buf[0] = (byte)(backCode >> 8); //buf[0]存回应码高位 buf[1] = (byte)(backCode & 0xFF); //buf[1]存回应码低位 buf[2] = (byte)(pack_Len >> 8); //buf[2]存包长度高位 buf[3] = (byte)(pack_Len & 0xFF); //buf[3]存包长度低位 byte[] dataByte = System.Text.Encoding.Unicode.GetBytes(dataContent); //数据包内容byte dataByte.CopyTo(buf, 4); //把数据包byte[] 压入到buf数组中 //解包过程 Int16 uBackCode = (Int16)(((buf[0] & 0xFF) << 8) | (buf[1] & 0xFF)); //得到回应码 Int16 u_Pack_Len = (Int16)(((buf[2] & 0xFF) << 8) | (buf[3] & 0xFF)); //得到包长度 string uDataContent = ""; int tempLenght = dataContent.Length * 2; byte[] temp = new byte[tempLenght]; Array.Copy(buf, 4, temp, 0, tempLenght - 1); //把byte[]数组中属于数据包内容定义到临时数组 uDataContent = System.Text.Encoding.Unicode.GetString(temp); //通过转换进获取数据包内容
雷明的主页 雷明 | 初学一级 | 园豆:50
提问于:2009-05-06 11:34
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册