您的位置:程序门 -> vc/mfc -> 网络编程



recv函数接收到的数是字节流,处理数据时我想按接收到的顺序进行处理,每两个字节组成一个整数,该怎么做?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


recv函数接收到的数是字节流,处理数据时我想按接收到的顺序进行处理,每两个字节组成一个整数,该怎么做?
发表于:2008-02-22 15:39:26 楼主
按照我们自定义的传输协议规定,除包头数据外,其余的数据每两个字节代表一个整数,所以我接收数据时,需要将数据按照两个字节进行组合,以便得到真实的有效数据。可是这个怎么操作啊?还有就是接收到的数据都是网络字节序的,我怎么在处理时转化为主机字节序?哪位给指点一下,最好用代码示范一下。多谢
发表于:2008-02-22 15:55:531楼 得分:0
word*   pword   =   (word*)pbuffer;
word   w1   =   *pword++;
word   w2   =   *pword++;
......
无需做字节序转换
发表于:2008-02-22 15:59:422楼 得分:0
无需做字节序转换
////

我的那个协议规定,每一个数据都是u_short型的,高字节在前,低字节在后。
可发送和接收时都是char型数据,是不是发送和接收时都不用做字节序转换?
发表于:2008-02-22 16:02:123楼 得分:0
续:
如果我想将两个byte值转化为一个word值,该怎么操作?是用makeword吗?
发表于:2008-02-22 18:38:394楼 得分:0
byte   bv1=1,bv2=1;
word   wval   =   0;
wval   =   (bv1 < <8)   +   bv2;
发表于:2008-02-22 18:41:115楼 得分:0
补充:bv1是高位
发表于:2008-02-22 21:18:116楼 得分:0
发送和接收时都不用进行网络字节序和主机字节序的转换吗?
发表于:2008-02-22 21:32:347楼 得分:0
高低位的次序是你们自己的协议来定的。
目前pc都是低位在前,如果高位在前就交换一下,或者用4楼的方法。
发表于:2008-02-22 22:13:098楼 得分:0
网络上传送整数在同一种机器上也可以不经过转化而直接使用。
发表于:2008-02-23 03:29:289楼 得分:0
//   server   side
word   nvalue   =   1234;  
send(s,   (char*)&nvalue,   sizeof(nvalue),   0);

//   client   side:
word   nvalue;
recv(s,   (char*)&nvalue,   sizeof(nvalue),   0);
发表于:2008-02-23 13:49:1310楼 得分:0
网络上传送整数在同一种机器上也可以不经过转化而直接使用。
///

“同一种机器上”是不是指的同一种操作系统?
发表于:2008-02-23 18:21:0311楼 得分:0
“同一种机器上”当然是硬件和操作系统都是同一种类。
发表于:2008-02-23 18:42:3312楼 得分:0
字节序和平台有关吧,和操作系统我记得无关

至于你的问题,用htons来转换更好,修正一下楼上的代码

c/c++ code
word* pword = (word*)pbuffer; word w1 = htons(*pword++); word w2 = htons(*pword++);


快速检索

最新资讯
热门点击