case FD_READ: // 读数据
recv(m_Accept, (char*)&buff, sizeof(buff), 0);
//str = buff; // char 转 CString
str.Format(L"%s",buff);
m_Msg.ReplaceSel(str + L"\n");
MessageBox(str, NULL, MB_OK);
break;

解决方案 »

  1.   


    recv(m_Accept, (char*)&buff, sizeof(buff), 0);你的buff怎么定义的?你的recv返回的值是什么?先看看
      

  2.   

    SOCKET m_Listen;
    SOCKET m_Accept;
    1.
    WSAAsyncSelect(m_Listen, m_hWnd, WM_SOCKET, FD_ACCEPT|FD_READ);
    2.
    case FD_READ: // 读数据
    recv(m_Accept, (char*)&buff, sizeof(buff), 0);
    str.Format(L"%s",buff);
    MessageBox(str, NULL, MB_OK);
    break;
    发送端void C客户端Dlg::OnBnClickedSend()
    { // 发送信息
    m_Msg.SetSel(-1,   -1); char buff[1000] = {0};
    CString str; GetDlgItemText(IDC_IME, str); // 得到发送内容
    str.GetBuffer(0); // CS转char int Ret = send(m_Connect, (char*)&buff,sizeof(buff),0);
    if (Ret == SOCKET_ERROR)
    { m_Msg.ReplaceSel(L"发送信息失败。\n");
    }else
    { m_Msg.ReplaceSel(str + L"\n");
    }
    }
      

  3.   

    SOCKET m_Listen; 
    SOCKET m_Accept; 
    1.
    WSAAsyncSelect(m_Listen, m_hWnd, WM_SOCKET, FD_ACCEPT|FD_READ);
    2.
    case FD_READ: // 读数据
    recv(m_Accept, (char*)&buff, sizeof(buff), 0);//若buff为空则无法接收内容了,建议改为1024
    str.Format(L"%s",buff);
    MessageBox(str, NULL, MB_OK);
    break;
      

  4.   

    void C客户端Dlg::OnBnClickedSend()
    { // 发送信息
    m_Msg.SetSel(-1, -1);char buff[1000] = {0};
    CString str;GetDlgItemText(IDC_IME, str); // 得到发送内容
    str.GetBuffer(0); // CS转charint Ret = send(m_Connect, (char*)&buff,sizeof(buff),0);
    if (Ret == SOCKET_ERROR)
    { m_Msg.ReplaceSel(L"发送信息失败。\n");
    }else
    { m_Msg.ReplaceSel(str + L"\n");
    }
    }我认为是你的客户端有问题:
    你的buff 根本没有被赋值,还是初始化的{0}就直接发给服务端了,str根本没赋值给buff,服务端怎么会接收到信息呢?
      

  5.   

    .
    .
    .
    GetDlgItemText(IDC_IME, str); // 得到发送内容
    strcpy(buff,str);//如果是ANSI的话
    int Ret = send(m_Connect, (char*)&buff,sizeof(buff),0);
    .
    .
    .
    .
    .
      

  6.   

    recv(m_Accept, (char*)&buff, sizeof(buff), 0);
    中的buff是怎么定义的. 
    如果你的buff是数组类型,到是没事.
    如果是一个指针类型的话这样写(char*)&buff,就不知道指到哪里去了,收到的数据.
    另外,如果是数组,因为buff本身就已经是指针,没必要加一个&. 直接写成(char*)buff即可.
      

  7.   

    发送端那里我要怎么改呢 
    我用的是2010 VS我改成这样报错..
    m_Msg.SetSel(-1,   -1); char buff[1000] = {0};
    CString str; GetDlgItemText(IDC_IME, str); // 得到发送内容
    //str.GetBuffer(0); // CS转char
    strcpy(buff, str);//如果是ANSI的话 //int Ret = send(m_Connect, (char*)&buff,sizeof(buff),0);
    int Ret = send(m_Connect, (char*)buff,sizeof(buff),0); if (Ret == SOCKET_ERROR)
    { m_Msg.ReplaceSel(L"发送信息失败。\n");
    }else
    { m_Msg.ReplaceSel(str + L"\n");
    }