接收到的
recv(socket,recvBuffer,1024,0))
recvBuffer为char * 怎么才能取到我发送的值呢?
21 个解决方案
#1
定义个包头,指明数据段的长度。然后先收包头,根据包头接受数据段的数据~~
#2
接收到的数据都是二进制的,你认为它是什么就是什么。
当然不能乱来。
当然不能乱来。
#3
C++用unsigned char
#4
再详细点呀!
#5
这个已经定义好了.主要是接收的是二进制的.我怎么才能把它转换成字符呢?
#6
C++用unsigned char
你应用层收到的已经是 字节类型了。
你先接收包头,然后判断包体是否分包
包体有多长。
然后使用 recv 继续接收包体的内容。
当然一定要考虑制定的协议来处理你收到的内容
你应用层收到的已经是 字节类型了。
你先接收包头,然后判断包体是否分包
包体有多长。
然后使用 recv 继续接收包体的内容。
当然一定要考虑制定的协议来处理你收到的内容
#7
上一下我的代码吧.还不行呀
我客户端定义好了.包头是4个字节.它用它来定义总长度.可得到的确实什么看不懂的东西!能不能再详细一点.对这真是太不懂了!
void DealData(char* recvBuffer)
{
char res[5];
memcpy(res,recvBuffer,4);
res[4]=0;
printf("%s",res);
}
我客户端定义好了.包头是4个字节.它用它来定义总长度.可得到的确实什么看不懂的东西!能不能再详细一点.对这真是太不懂了!
#8
学习。
#9
你这个是C++的代码吧?
#10
放在一个FIFO队列中
#11
发送的时候把发送的数据做成一个BUFFER,就是CHAR[],比如[15name1],第一位1表示是标识符,第二位表示后面数据的长度,然后读取5个CHAR,就是name1.
这种协议需要自己去定义的,根据你的需要自己定义
这种协议需要自己去定义的,根据你的需要自己定义
#12
void DealData(char* recvBuffer)
{
int res, t;
memcpy(&t,recvBuffer,4);
res = ntohl(t);
printf("%d",res);
}
#13
可是我的客户端不是c++的.它用的是C#.并且把传送的数据转化成了字节流!
#14
这个...
char 和 byte 在二进制层面会有区别吗,都是8个位而已。
你把recv之后的缓冲区内的数据看成(byte)类型的就行了呗。
char 和 byte 在二进制层面会有区别吗,都是8个位而已。
你把recv之后的缓冲区内的数据看成(byte)类型的就行了呗。
#15
对啊,你只要知道他的字节流协议就行啊,按BYTE处理一样的啊
#16
嗯.是的.谢谢大家.
void DealData(char* recvBuffer)
{
int t;
memcpy(&t,recvBuffer,4);
printf("%d\n",t);
}
我是int型.只有这样才能得到.尤其是谢谢justkk
void DealData(char* recvBuffer)
{
int t;
memcpy(&t,recvBuffer,4);
printf("%d\n",t);
}
我是int型.只有这样才能得到.尤其是谢谢justkk
#17
struct mydata{
int a;
long b;
char c[8];
};
recvBytes[1024];
recv...;
mydata* pdata=(mydata*)recvBytes;
printf(...pdata->c)
int a;
long b;
char c[8];
};
recvBytes[1024];
recv...;
mydata* pdata=(mydata*)recvBytes;
printf(...pdata->c)
#18
定义个unsigned char 或 BYTE 数组,传进去即可。
感觉楼主是学JAVA或C#,数据类型都是宗教,脑子只要考虑 内存位置,读或写几个字节长度即可
感觉楼主是学JAVA或C#,数据类型都是宗教,脑子只要考虑 内存位置,读或写几个字节长度即可
#19
是的.怎么才能转变一下呢.我刚开始学C++.还请多指教
#20
怎么省略了ntohl()呢?那是处理整型的字节序的
将网络字节序转换为本机字节序,当不同类型的主机通信时非常必要..
将网络字节序转换为本机字节序,当不同类型的主机通信时非常必要..
#21
二进制的东西都是一样的
char从到unsinged char其实我所谓转换
C#和C++对接我做过
只要双方数据结构同意
协商好痛心协议就没有问题
char从到unsinged char其实我所谓转换
C#和C++对接我做过
只要双方数据结构同意
协商好痛心协议就没有问题
#1
定义个包头,指明数据段的长度。然后先收包头,根据包头接受数据段的数据~~
#2
接收到的数据都是二进制的,你认为它是什么就是什么。
当然不能乱来。
当然不能乱来。
#3
C++用unsigned char
#4
再详细点呀!
#5
这个已经定义好了.主要是接收的是二进制的.我怎么才能把它转换成字符呢?
#6
C++用unsigned char
你应用层收到的已经是 字节类型了。
你先接收包头,然后判断包体是否分包
包体有多长。
然后使用 recv 继续接收包体的内容。
当然一定要考虑制定的协议来处理你收到的内容
你应用层收到的已经是 字节类型了。
你先接收包头,然后判断包体是否分包
包体有多长。
然后使用 recv 继续接收包体的内容。
当然一定要考虑制定的协议来处理你收到的内容
#7
上一下我的代码吧.还不行呀
我客户端定义好了.包头是4个字节.它用它来定义总长度.可得到的确实什么看不懂的东西!能不能再详细一点.对这真是太不懂了!
void DealData(char* recvBuffer)
{
char res[5];
memcpy(res,recvBuffer,4);
res[4]=0;
printf("%s",res);
}
我客户端定义好了.包头是4个字节.它用它来定义总长度.可得到的确实什么看不懂的东西!能不能再详细一点.对这真是太不懂了!
#8
学习。
#9
你这个是C++的代码吧?
#10
放在一个FIFO队列中
#11
发送的时候把发送的数据做成一个BUFFER,就是CHAR[],比如[15name1],第一位1表示是标识符,第二位表示后面数据的长度,然后读取5个CHAR,就是name1.
这种协议需要自己去定义的,根据你的需要自己定义
这种协议需要自己去定义的,根据你的需要自己定义
#12
void DealData(char* recvBuffer)
{
int res, t;
memcpy(&t,recvBuffer,4);
res = ntohl(t);
printf("%d",res);
}
#13
可是我的客户端不是c++的.它用的是C#.并且把传送的数据转化成了字节流!
#14
这个...
char 和 byte 在二进制层面会有区别吗,都是8个位而已。
你把recv之后的缓冲区内的数据看成(byte)类型的就行了呗。
char 和 byte 在二进制层面会有区别吗,都是8个位而已。
你把recv之后的缓冲区内的数据看成(byte)类型的就行了呗。
#15
对啊,你只要知道他的字节流协议就行啊,按BYTE处理一样的啊
#16
嗯.是的.谢谢大家.
void DealData(char* recvBuffer)
{
int t;
memcpy(&t,recvBuffer,4);
printf("%d\n",t);
}
我是int型.只有这样才能得到.尤其是谢谢justkk
void DealData(char* recvBuffer)
{
int t;
memcpy(&t,recvBuffer,4);
printf("%d\n",t);
}
我是int型.只有这样才能得到.尤其是谢谢justkk
#17
struct mydata{
int a;
long b;
char c[8];
};
recvBytes[1024];
recv...;
mydata* pdata=(mydata*)recvBytes;
printf(...pdata->c)
int a;
long b;
char c[8];
};
recvBytes[1024];
recv...;
mydata* pdata=(mydata*)recvBytes;
printf(...pdata->c)
#18
定义个unsigned char 或 BYTE 数组,传进去即可。
感觉楼主是学JAVA或C#,数据类型都是宗教,脑子只要考虑 内存位置,读或写几个字节长度即可
感觉楼主是学JAVA或C#,数据类型都是宗教,脑子只要考虑 内存位置,读或写几个字节长度即可
#19
是的.怎么才能转变一下呢.我刚开始学C++.还请多指教
#20
怎么省略了ntohl()呢?那是处理整型的字节序的
将网络字节序转换为本机字节序,当不同类型的主机通信时非常必要..
将网络字节序转换为本机字节序,当不同类型的主机通信时非常必要..
#21
二进制的东西都是一样的
char从到unsinged char其实我所谓转换
C#和C++对接我做过
只要双方数据结构同意
协商好痛心协议就没有问题
char从到unsinged char其实我所谓转换
C#和C++对接我做过
只要双方数据结构同意
协商好痛心协议就没有问题