C++使用Winsock发送包含0的数据报

来源:百度知道 编辑:UC知道 时间:2024/06/15 22:28:23
我是一个初中学生,正在编写一个发送TCP/IP数据报的程序,但是如果报文中出现16进制的00('\0'),就发不了了00后的数据。'\0'是字符串结束的标志,但是我用抓包的方法抓住过开头就是00的数据报。请问那样的数据报如何发送?
非常感谢!并追加10分!
我试了memset,getborn 的方法在理论上讲应该亦可行。但是只能采纳一个答案为最佳答案,所以只好采纳写得最详细答案了……
P.S.要是z.baidu.com能像CSDN.net那样能按照自己的意愿给多个人分就好了……

不要以为send()第二个参数的类型是char*就认为发的只能是字符串, 因为他是指针, 所以是什么类型的指针都没有关系. 第3个参数并不一定指的是字符串的长度, 可以是任意数据的长度.

比如你发数据报, 一般先定义一个结构:
struct _PACKET_T
{
int nTyp;
int Len;
...
};

发的时候

struct _PACKET_T packet;
send(socket, (char*)&packet, (int)sizeof(struct _PACKET_T), 0);

完全可以发。有可能是你的程序中使用了strcpy,sprintf("%s")等函数把数据当成字符串处理,把00后面的部分截掉了,换成memcpy试试。
另外初中就做tcp/ip数据报真让人敬佩

大哥 你真是 初中生吗?