很简单的问题我咋就弄不明白喃,这都想了一上午啦功能就是:从编辑框中取出字符串,打包到一个结构体,发送,别人从这个结构体中取出字符串,然后显示在编辑框中,环境都是Unicode
//发送端
typedef struct
{
char type;
unsigned short len;
char str[];
}msg;
//从编辑框中取出数据
CString str1;
m_edit.GetWindowText(str1);//将这个str1打包进这msg1这个结构体
msg msg1;
msg1.type='a';
msg1.len=sizeof(msg)+(str1.GetLength()+1)*sizeof(WCHAR);
memcpy(msg1.str,str1.GetBuffer(),(str1.GetLength()+1)*sizeof(WCHAR));//发送这个数据
send(s,(char*)&msg1,msg1.len,NULL);
////////////////////////////////////////////////////////////////////////////////////////////////////
//对方接收这个数据
char p[8000];
ZeroMemory(p,8000);
recv(s,p,8000,NULL);
msg *msg2=(msg *)p;CString str2;
str2.Format(L"%s",pmsg->str);m_edit.SetWindowText(str2);
有任何问题请指正,还有就是:我老觉得在包里添加个包长度到底有什么用?最后 感谢大家啦 呵呵
//发送端
typedef struct
{
char type;
unsigned short len;
char str[];
}msg;
//从编辑框中取出数据
CString str1;
m_edit.GetWindowText(str1);//将这个str1打包进这msg1这个结构体
msg msg1;
msg1.type='a';
msg1.len=sizeof(msg)+(str1.GetLength()+1)*sizeof(WCHAR);
memcpy(msg1.str,str1.GetBuffer(),(str1.GetLength()+1)*sizeof(WCHAR));//发送这个数据
send(s,(char*)&msg1,msg1.len,NULL);
////////////////////////////////////////////////////////////////////////////////////////////////////
//对方接收这个数据
char p[8000];
ZeroMemory(p,8000);
recv(s,p,8000,NULL);
msg *msg2=(msg *)p;CString str2;
str2.Format(L"%s",pmsg->str);m_edit.SetWindowText(str2);
有任何问题请指正,还有就是:我老觉得在包里添加个包长度到底有什么用?最后 感谢大家啦 呵呵
{
char type;
unsigned short len;
char str[];
}msg;这样设计结构体不行,结构体空间不够,你用sizeof验证一下就知道了。
实在要这样设计也可以,但是不能直接构造msg对象,字符串空间很容易被其它栈变量冲掉,应该像下面这样:int len = ...;
BYTE* pBuf = new BYTE[sizeof(msg) + len * sizeof(WCHAR)];
msg* pMsg = (msg*)pBuf;
pMsg->type = ...;
pMsg->len = len;
memcpy(pMsg->str, ...);
send(pMsg, ...);结构体里设置len属性是为了方便接收者确定字符串长度,只是一个协议,当然你也可以不要。