请教一下socket发送字符串的问题

时间:2023-01-07 11:40:25
程序描述如下:

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出去了~取决于你发送的长度

#3


看这个sock_puts函数应该不行,它没有指定串的长度,说明它是自动根据0x00来判断结束的。
所以你应该选择sock_write函数来发送。当然,长度如楼上所说,不能用字符串的方法来判断。

#4


用int sock_write(SOCKET* s,char* data,int len);
len是data数组的长度,有没有0x00都一样

#5


如果用sock_write的话,直接这样写
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出去了~取决于你发送的长度

#3


看这个sock_puts函数应该不行,它没有指定串的长度,说明它是自动根据0x00来判断结束的。
所以你应该选择sock_write函数来发送。当然,长度如楼上所说,不能用字符串的方法来判断。

#4


用int sock_write(SOCKET* s,char* data,int len);
len是data数组的长度,有没有0x00都一样

#5


如果用sock_write的话,直接这样写
sock_write(&sock,SendBuff, len); //len为SendBuff的数据长度

如果用sock_puts的话,只能把0替换成别的数据,比如把0x0换成'5', 而把单个"5"替换成"55"这样在接收数据反过来处理就行了,即遇到单个'5'的情况替换成0x0, 双"55"替换成单个"5".