我自己定义了一个CCLIENTITEM的结构体,,能不能直接用SEND()函数把这个结构体类型的数据发给客户端啊

解决方案 »

  1.   

    当然可以了,
    接收的时候也转换成CCLIENTITEM结构就可以了
      

  2.   

    可以用 char* 发送过去。
    如下:
    T_QRYCONDITION tQryCondition;
    tQryCondition.iQueryConditionType = htons(nParam1);
    strncpy(tQryCondition.szQueryCondition, strParam2.c_str(), 1024);
    iError = send(m_hClientSocket, (const char *)&tQryCondition, sizeof(tQryCondition), 0);
    if(iError >= 0)
    {
    TRACE("发送成功");
    }
    else if(iError == SOCKET_ERROR)
    {
    closesocket(m_hClientSocket);
    return "";
    }
    接收:                        //接收
                            char szBuf[2048] = {0};
                          int iRec = recv(clientSocket, szBuf, sizeof(szBuf), 0);
                            if (iRec > 0)
                            {
                                T_QRYCONDITION *pQryCondition = (T_QRYCONDITION *)szBuf;
                            }
      

  3.   

    可以啊。CCLIENTITEM ClientItem;
    //填充内容
    //再send
    send(s,(char*)&ClientItem,sizeof(ClientItem),0);//s为SOCKET
      

  4.   

    但是CCLIENTITEM里面不能有指针。
      

  5.   

    不行啊,,,发送过去后收到的结构体没数据啊
    我的发送代码:send(accSock,(char*)&pChatRoom->m_ClientArray,sizeof(pChatRoom->m_ClientArray),0);
    我的接收代码: CArray<CClientItem,CClientItem> *m_ClientArray2;
    recv(pChatRoom->m_ConnectSock,szbuf3, sizeof(szbuf3), 0);
        m_ClientArray2 = (CArray<CClientItem,CClientItem> *) szbuf3;
    pChatRoom->m_OnlineName.ResetContent();
    for( idx2 = 0; idx2 <m_ClientArray2->GetSize(); idx2++ ) 
    {

    pChatRoom->m_OnlineName.AddString(m_ClientArray2->ElementAt(idx2).ClientName);

    }
    结构体代码:class CClientItem {
    public:
    int     num;
    CString m_strIp;
    SOCKET m_Socket;
    HANDLE hThread;
    CMychatroomDlg *m_pMainWnd;
    CHAR   ClientName[1024];
    CClientItem(){
    m_pMainWnd = NULL;
    m_Socket = INVALID_SOCKET;
    hThread = NULL;
    }
    };
      

  6.   

    那是数据块!
    一般是数据内存地址再加上长度!
    比如要你要发送一个int 
    那么就是
    int a=100;
    send(&a,sizeof(int));