我有个MFC写的CSocket程序,下面是我摘抄的代码://CListenSocket 是继承自CSocket
CListenSocket m_socket;
m_socket.Create();
m_socket.Connect(m_sServerIp,m_nServerPort);
typedef struct{
int cmd; //cmdID
int sequence; //序列
int totallen; //总长度
}RESINFO;
RESINFO resinfo;
memset(&resinfo,0,sizeof(resinfo));
resinfo.totallen=12;
resinfo.sequence=1;
resinfo.cmd=2;
m_socket.Send(&resinfo,52);
............................
以上代码能执行成功,且对方马上能收到数据,如果加上htonl()函数,对方只能感知到连接上,但数据就是收不到
/*****************************
resinfo.totallen=htonl(56);
resinfo.sequence=htonl(1);
resinfo.cmd=htonl(2);
******************************/这是为什么啊,跪求大虾们帮帮弟兄!!!!在线等待....
CListenSocket m_socket;
m_socket.Create();
m_socket.Connect(m_sServerIp,m_nServerPort);
typedef struct{
int cmd; //cmdID
int sequence; //序列
int totallen; //总长度
}RESINFO;
RESINFO resinfo;
memset(&resinfo,0,sizeof(resinfo));
resinfo.totallen=12;
resinfo.sequence=1;
resinfo.cmd=2;
m_socket.Send(&resinfo,52);
............................
以上代码能执行成功,且对方马上能收到数据,如果加上htonl()函数,对方只能感知到连接上,但数据就是收不到
/*****************************
resinfo.totallen=htonl(56);
resinfo.sequence=htonl(1);
resinfo.cmd=htonl(2);
******************************/这是为什么啊,跪求大虾们帮帮弟兄!!!!在线等待....
除非你用API函数才要亲自转换。
以上代码能执行成功,且对方马上能收到数据,如果加上htonl()函数,对方只能感知到连接上,但数据就是收不到
/*****************************
resinfo.totallen=htonl(56);
resinfo.sequence=htonl(1);
resinfo.cmd=htonl(2);
这个是你的数据,转换为htonl做什么呢? ? ? lz别画蛇添足
不知道htonl干吗就用?它可是把字节序交换,一个数字1,你调用一下就知道它变成啥了。不要以为一个有用得函数就到处用,每个函数都有其应该用得地方,不应该用得地方。既然不用htonl可以,说明双方字节序一致,你一换不匹配了,当然就不行了
char begin[10];
int cmd; //cmdID
int sequence; //序列
int totallen; //总长度
}RESINFO; 就可以立刻发送出去,不知你发现没有,如果你用java写的话,对方同样收不到,我做过测试,好像以\0开始的结构,java不能收!