unsigned char SendBuff[SBUFFLEN]; //存放待发送的缓冲数据
sock_puts(&sock,SendBuff); //发送
我用的库是wattcp,一个dos下的socket编程库,函数的原型可能和winsock不太一样,大家凑合着看一下吧;
问题是,如果SendBuff[]中有0x00的字符,sock_puts()这个函数会认为这是字符串的结束,所以就只发送第一个"0x00"出现之前的字符;
但是需要发送的数据不可避免的要带有0x00,请问该如何处理?
wattcp有下面两个发送函数可选,原型分别是:
int sock_write(SOCKET* s,char* data,int len);
char sock_puts(SOCKET* s,char *data);
5 个解决方案
#1
你的len参数不要传递类似这样的时strlen()就行了
#2
00没有关系,跟你设置的长度有关系,好比你发10个0X00,如下:
UCHAR buf[1024];
memset(buf, 0x00, 1024);
send(hSock, buf, 10);
就能发送10个byte出去了~取决于你发送的长度
UCHAR buf[1024];
memset(buf, 0x00, 1024);
send(hSock, buf, 10);
就能发送10个byte出去了~取决于你发送的长度
#3
看这个sock_puts函数应该不行,它没有指定串的长度,说明它是自动根据0x00来判断结束的。
所以你应该选择sock_write函数来发送。当然,长度如楼上所说,不能用字符串的方法来判断。
所以你应该选择sock_write函数来发送。当然,长度如楼上所说,不能用字符串的方法来判断。
#4
用int sock_write(SOCKET* s,char* data,int len);
len是data数组的长度,有没有0x00都一样
len是data数组的长度,有没有0x00都一样
#5
如果用sock_write的话,直接这样写
sock_write(&sock,SendBuff, len); //len为SendBuff的数据长度
如果用sock_puts的话,只能把0替换成别的数据,比如把0x0换成'5', 而把单个"5"替换成"55"这样在接收数据反过来处理就行了,即遇到单个'5'的情况替换成0x0, 双"55"替换成单个"5".
sock_write(&sock,SendBuff, len); //len为SendBuff的数据长度
如果用sock_puts的话,只能把0替换成别的数据,比如把0x0换成'5', 而把单个"5"替换成"55"这样在接收数据反过来处理就行了,即遇到单个'5'的情况替换成0x0, 双"55"替换成单个"5".
#1
你的len参数不要传递类似这样的时strlen()就行了
#2
00没有关系,跟你设置的长度有关系,好比你发10个0X00,如下:
UCHAR buf[1024];
memset(buf, 0x00, 1024);
send(hSock, buf, 10);
就能发送10个byte出去了~取决于你发送的长度
UCHAR buf[1024];
memset(buf, 0x00, 1024);
send(hSock, buf, 10);
就能发送10个byte出去了~取决于你发送的长度
#3
看这个sock_puts函数应该不行,它没有指定串的长度,说明它是自动根据0x00来判断结束的。
所以你应该选择sock_write函数来发送。当然,长度如楼上所说,不能用字符串的方法来判断。
所以你应该选择sock_write函数来发送。当然,长度如楼上所说,不能用字符串的方法来判断。
#4
用int sock_write(SOCKET* s,char* data,int len);
len是data数组的长度,有没有0x00都一样
len是data数组的长度,有没有0x00都一样
#5
如果用sock_write的话,直接这样写
sock_write(&sock,SendBuff, len); //len为SendBuff的数据长度
如果用sock_puts的话,只能把0替换成别的数据,比如把0x0换成'5', 而把单个"5"替换成"55"这样在接收数据反过来处理就行了,即遇到单个'5'的情况替换成0x0, 双"55"替换成单个"5".
sock_write(&sock,SendBuff, len); //len为SendBuff的数据长度
如果用sock_puts的话,只能把0替换成别的数据,比如把0x0换成'5', 而把单个"5"替换成"55"这样在接收数据反过来处理就行了,即遇到单个'5'的情况替换成0x0, 双"55"替换成单个"5".