本帖最后由 VisualEleven 于 2013-08-14 14:49:52 编辑

解决方案 »

  1.   

    这有可以运行的UDP例子,你看看吧:
    http://download.csdn.net/detail/geoff08zhang/4571358
      

  2.   

    //这一句改一下
    /*strReceive += gcInBuffer;*/
    for(int i=0; i<lenth; i++)
    {
      CString str;
      str.Format(_T("%02X "), (unsigned int)gcInBuffer);
      strReceive += str;
    }
      

  3.   


    我看了一下,一开始gcInBuffer里的数据就是乱码。具体我实在是不知道怎么回事了,我只是刚接触MFC,不知道到底该怎么解决,请问你有什么办法能帮助小弟的。
      

  4.   

    gcInBuffer 定义为了 char 型, 所以非正常的ASC码就会显示为乱码数据转换为十六进制的 ASC 码 
      

  5.   

    没太明白你什么意思。是说要把数组gcInBuffer[]中的数据转换成16进制显示?请问转换的程序怎么写,我之前找了一写转换的方法都没有成功,还希望辛苦你帮帮我吧。
      

  6.   

    只要找到gcInBuffer[]中每次字符的编码值,连起来就是一个数字,把这个数字转换成16进制就行了。如“abc”的话就是对应二进制的011000010110001001100011,转换成16进制为0x616263
      

  7.   

    我调试的时候发现gcInBuffer[]中的值就是”?”,请问这是怎么回事
      

  8.   

    我调试的时候发现gcInBuffer[]中的值就是”?”,请问这是怎么回事说明字符的编码不在编译器的字符集中,不是有效字符。
      

  9.   

    我调试的时候发现gcInBuffer[]中的值就是”?”,请问这是怎么回事说明字符的编码不在编译器的字符集中,不是有效字符。
    那么请问这种问题该如何解决?
      

  10.   

    gcInBuffer 定义为 unsigned char gcInBuffer[N]的形式
      

  11.   

    这样子产生了个错误   “recvfrom”: 不能将参数 2 从“unsigned char [1027]”转换为“char *”
      

  12.   

    这样子产生了个错误   “recvfrom”: 不能将参数 2 从“unsigned char [1027]”转换为“char *”
    您好,我能加您QQ或者别的联系方式吗?我弄这个问题弄了3天了,依然没弄出来,确实很着急,急求您的的帮助!!
      

  13.   

    BYTE buf[XXX] = {0xAA, xxx};
    比如发送端: sendto(SOCKET, (char*)buf, ....);
    那么接收端: recvfrom(SOCKET, (chat*)buf, ...);
      

  14.   

    为什么要BYTE buf={0xAA,xxx},0xAA只是我设备发的一个数据,具体设备要发什么是不清楚的,我只是做个测试,所以让设备持续发0xAA
      

  15.   


    版主您好,我按照您的方法,byte定义数组,然后在接受端recvfrom中强制转换,结果buf中的数据还是一个“?”,请问还有别的方法吗?
      

  16.   

    UINT ServerRecvThread(LPVOID lpParm )
    {
    CUDP_ServerDlg *dlg = (CUDP_ServerDlg*)lpParm;
    char gcInBuffer[1027];
    int lenth;
    int size = sizeof(sockaddr_in);
    CString strReceive, tempStr;
     char*gcClientIP; 
     bool bSendEnable = false;
     int iLineNum;//显示清零
    loop:
     memset(gcInBuffer,0,1027);//char清空;
     bSendEnable = false;
     strReceive.Empty(); tempStr.Empty();
    while(!dlg->m_bTerminateThread)
    {
    if ((lenth = recvfrom(dlg->m_sockServer, gcInBuffer, 1024, 0, (struct sockaddr *)&dlg->m_clientAddr, &size) )>0)
    {
    if (!bSendEnable)
    {
    CWnd *cwnd = dlg->GetDlgItem(IDC_BUTTON_SEND);//有效发送按扭
    cwnd->EnableWindow(TRUE);
    bSendEnable = true;
    } gcClientIP = inet_ntoa((dlg->m_clientAddr).sin_addr);
    tempStr.Format("%s", gcClientIP);
    dlg->SetDlgItemText(IDC_STATIC_CLINET_ADDRESS, tempStr);
    tempStr.Format("%hu", dlg->m_clientAddr.sin_port);
    dlg->SetDlgItemText(IDC_STATIC_CLIENT_PORTNO, tempStr);
    tempStr.Format("%s:%hu: ", gcClientIP, dlg->m_clientAddr.sin_port);
    strReceive += tempStr;
    gcInBuffer[lenth] = '\r';
    gcInBuffer[lenth+1] = '\n';
    gcInBuffer[lenth+2] = '\0';
    strReceive += gcInBuffer;
    dlg->m_editReceive.SetWindowText(strReceive);
    iLineNum=dlg->m_editReceive.GetLineCount();//接收编辑框的行数 }
            if(iLineNum>=20)goto loop;
    }
    return 0;
    }
    //主要是char 数组的初始化清空,不管是接收的数组还是发送的数组开始的时候都清空
    //       int iLineNum;//显示清零
    //loop:
    //    memset(gcInBuffer,0,1027);//char清空;
    //  bSendEnable = false;
    //  strReceive.Empty(); tempStr.Empty();
    //这里是重点.