我的工程是Unicode编码的,在获取ip时取到的是Unicode类型的,转换成ansi后无法发送UTP报文。
//获取IP
CString rServerIP;
char *serverIP = new char[20];
m_serverIP.GetWindowText(rServerIP);
SOCKADDR_IN server;
server.sin_family = AF_INET;
server.sin_port = DEFAULT_PORT;
WideCharToMultiByte(CP_ACP,0,rServerIP.GetBuffer(),-1,serverIP,20,NULL,NULL);
server.sin_addr.s_addr = inet_addr(serverIP);

delete []serverIP;
//创建套接字
m_socket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
if (m_socket == INVALID_SOCKET)
{
MessageBox(L"创建套接字失败!",L"ERROR",MB_ICONERROR);
return ;
}
//发送数据到服务器
GetDlgItemText(IDC_EDIT2,m_send);
char sendBuffer[MAX_PATH] ={ 0 };
int len = m_send.GetLength();
WideCharToMultiByte(CP_ACP,0,m_send.GetBuffer(),-1,sendBuffer,MAX_PATH,NULL,NULL);
LONG retval = sendto(m_socket,sendBuffer,len,0,(SOCKADDR *)&server,sizeof(SOCKADDR));//这样没法收到数据 {
char * dest = "127.0.0.1";
struct sockaddr_in to;
int tolen = sizeof(to);
to.sin_family=AF_INET;
to.sin_port=htons(23456); 
to.sin_addr.s_addr=inet_addr(dest);
SOCKET sDest = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(sDest == INVALID_SOCKET)
{
MessageBox(L" Failed socket()");
exit(0);
} int nResult = sendto(sDest,sendBuffer,len, 0, (sockaddr*)&to, sizeof(to));//这样能够收到数据 }
closesocket(m_socket);我不知道为什么会这样,调试的时候发现字符串中数据是正常的。求助~~~

解决方案 »

  1.   

    server.sin_addr.s_addr = inet_addr(serverIP);
    ===============
    这个位置serverIP的值正确么
      

  2.   

    DWORD dwIp = 0;
    m_serverIP.GetAddress (dwIp);SOCKADDR_IN server;
        server.sin_family = AF_INET;
        server.sin_port = DEFAULT_PORT;
        server.sin_addr.S_un.S_addr= htonl(dwIp);不就可以了,省的字符串转来转去
      

  3.   

    GetWindowText ==> GetWindowTextA
    GetDlgItemText ==> GetDlgItemTextA
      

  4.   

    又试了试,发现不是ip地址那出错,我把第一个UDP发送的地址也写成第二种方式server.sin_addr.s_addr=inet_addr(dest);居然没法用。
    这么短的几行代码,居然找不到问题。。
      

  5.   

    server.sin_addr.S_un.s_addr=inet_addr(dest);
      

  6.   

    找到问题了,写端口的时候出错了,addrSock.sin_port = htons(DEFAULT_PORT)