很简单的问题我咋就弄不明白喃,这都想了一上午啦功能就是:从编辑框中取出字符串,打包到一个结构体,发送,别人从这个结构体中取出字符串,然后显示在编辑框中,环境都是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);
有任何问题请指正,还有就是:我老觉得在包里添加个包长度到底有什么用?最后 感谢大家啦 呵呵

解决方案 »

  1.   

    这样分开发有什么好处吗? 我想了一下,好处就是接收的时候创建buf时可以分配确定的字节?
      

  2.   

    typedef struct
    {
        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属性是为了方便接收者确定字符串长度,只是一个协议,当然你也可以不要。
      

  3.   

    char str[]; 肯定不对#define MAX_BUF_LEN 10000char str[MAX_BUF_LEN];此外建议一下,在网络编程领域,不要掺杂C++思想,一般稳定的网络程序,都是用C写的。