我定义一个结构体
struct socket_struct{
int socket_int;
CString socket_cstring;
};
发送出去
 socket_struct * word;
  word->socket_cstring="123";
  word->socket_int=10;
  send(client,(char*)&word,sizeof(socket_struct),0);
  closesocket(client);
接收
   CString str;
   char recvbuf[100];
socket_struct * temp;
   recv(sockconn,recvbuf,sizeof(socket_struct),0);
   temp=(socket_struct*)recvbuf;
   str=temp->socket_cstring;
   dlg->SetDlgItemText(IDC_RECV,str);
接收我是在线程里做的,可是总是收到一些错误数据导致服务端自动关闭了
我写的哪个地方有问题啊 研究一晚上了 没啥结果 请指点一二谢谢了

解决方案 »

  1.   

    CString是复杂的类,它内部有各种各样的成员,而其字符缓冲也并非一定是个数组,更有可能是个指针,指向别的保存字符的地方。作为一个类,它甚至还可能有虚函数,从而对象中还可能保存着虚函数表指针。……
    总之结果就是:你想要的东西都没发出去,发出去的全是那些你根本就没兴趣的对象的内部实现细节。
      

  2.   

    那我如何去发送CString类型的数据出去哪?转换成CHAR么?
      

  3.   

    一般我做结构体里面的成员都不用类的,用一些简单的数据类型,比如char ,int ,如果用char数组的话,可能需要指定本次char数组中有效数据的长度,这样接收的时候才能根据这个长度来接受
      

  4.   

    结构体是值类型的,CString是引用类型的在结构体里有引用类型的成员,很难保证当这个结构体被复制的时候,引用类型的成员是否是一个有效引用,就如 steedhorse(晨星) 所说。也许你在线程或者函数间传递结构体的时候,CString也许指向的是一个已经释放的引用,不仅数据错误,更有可能会导致访问内存错误
      

  5.   

    “结构体是值类型的,CString是引用类型的”
    ——楼上说的是C#或C++的CLI吧,那个不是CString,是System::String。
      

  6.   

    lypying(抽刀断水) ( ) 信誉:100    Blog  2007-2-2 0:38:54  得分: 0  
       
    那我如何去发送CString类型的数据出去哪?转换成CHAR么?
    ============================================
    你们双方的通信协议是怎样的?一切按照协议来。
    如果两边协议都是你自己定,最好使用char数组,有必要的话,再传一个数组长度过去。
      

  7.   

    你这个结构体的大小还能得到??sizeof有固定值??
      

  8.   

    那我因该怎么去做那?我是不是可以把cstring 发送的数据放到char数组里
    有哪位好心人可以发个代码上来 这个问题捆饶我两天了
      

  9.   

    建议有标准的基本类型如char[]吧
      

  10.   

    现在我改用char可是在传输后接收经过转换后都是乱码啊~  可以写出细节代码么?
    结构体在接受端是如何转换的哪?接受的不是必须是char么 我转换成我的结构体怎么做啊?
      

  11.   

    发送和接收要用对应转换方式!如发送CString 转char时用:
    CString str;
    int len=str.GetLength();
    char* cstr=new char[len];
    cstr=str.GetBuffer();
    str.ReleaseBuffer();接收char 转CString时用:CString str;
    str.Format("%d",cstr);
      

  12.   

    我发送的时候用
    send(client,(char*)&word,sizeof(socket_struct),0);
    发送结构体对么
    接收的时候怎么还原会那个结构 还是强制转换下么
    我DEBUG过 发送过去没什么问题但是接收的时候就乱了
    我搜索了好多资料有人说用串行化
    但具体怎么做啊 没接触过啊
      

  13.   

    1.结构体里用char数组代替CString 
    2.socket_struct * temp = new socket_struct;
       recv(sockconn,(char *)temp,sizeof(socket_struct),0);
    然后就temp->....了
      

  14.   

    参考这里:
    http://ztbls888.blog.163.com/blog/static/1718175982010101182939797/