這個網絡協議如何理解啊?

haolly 2013-06-10 07:08:25
const enum
{
MT_JION = 1, // 一个用户加入
MT_LEAVE, // 一个用户离开
MT_MESG, // 一个用户发送消息

// 内部使用,告诉新加入的用户自己的用户信息
MT_MINE
};

typedef struct gt_hdr
{
u_char gt_type; // 消息类型
DWORD dwAddr; // 发送此消息的用户的IP地址
char szUser[15]; // 发送此消息的用户的用户名

int nDataLength; // 后面数据的长度
char *data() { return (char*)(this + 1); }//這裡是什麽意思呢?
} GT_HDR;


int CGroupTalk::SendText(char *szText, int nLen, DWORD dwRemoteAddr)
{
// 构建消息封包
char buf[sizeof(GT_HDR) + 1024] = { 0 };
GT_HDR *pHeader = (GT_HDR *)buf;
pHeader->gt_type = MT_MESG;
pHeader->nDataLength = nLen < 1024 ? nLen : 1024;
strncpy(pHeader->szUser, m_szUser, 15);
strncpy(pHeader->data(), szText, pHeader->nDataLength);
//這裡如何理解?

// 发送此封包
int nSends = Send(buf, pHeader->nDataLength + sizeof(GT_HDR), dwRemoteAddr == 0 ? m_dwMultiAddr : dwRemoteAddr);
return nSends - sizeof(GT_HDR);
}
...全文
71 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
haolly 2013-06-11
  • 打赏
  • 举报
回复
引用 1 楼 aj3423 的回复:
struct x {
	int a;
	int b;
	int c;
};

int main() {
	x* a = new x;
	cout << hex;
	cout << (DWORD)a << endl; // 输出 xxx
	cout << (DWORD)(a+1) << endl; // 输出 xxx+12 == xxx+sizeof(x)
}
结论: 指针+1 就是指针地址+sizeof(结构体大小)
typedef struct gt_hdr
{
    ....
    char *data() { return (char*)(this + 1); }//this是指针,所以this+1 == this+sizeof(GT_HDR),跳过当前结构体,指向下面那个1024的开始处
} GT_HDR;
谢谢了
aj3423 2013-06-10
  • 打赏
  • 举报
回复
struct x {
	int a;
	int b;
	int c;
};

int main() {
	x* a = new x;
	cout << hex;
	cout << (DWORD)a << endl; // 输出 xxx
	cout << (DWORD)(a+1) << endl; // 输出 xxx+12 == xxx+sizeof(x)
}
结论: 指针+1 就是指针地址+sizeof(结构体大小)
typedef struct gt_hdr
{
    ....
    char *data() { return (char*)(this + 1); }//this是指针,所以this+1 == this+sizeof(GT_HDR),跳过当前结构体,指向下面那个1024的开始处
} GT_HDR;

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧