WSADATA wsaData;HWND hwnd;
SOCKET sock;
SOCKADDR_IN sa,cli;BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
///////////////
/////获取服务器所在主机的IP地址
//WSADATA wsaData;

int n;
char hostname[256];
hostent *pHostent;
struct sockaddr_in sa;
WSAStartup(MAKEWORD(2,2),&wsaData);
//////获取主机名
gethostname(hostname,sizeof(hostname));
/////获取主机IP地址,同时存放到缓冲区中
pHostent=gethostbyname(hostname);
    ////解析IP地址
for(n=0;pHostent->h_addr_list[n];n++)
{
memcpy(&sa.sin_addr.s_addr,pHostent->h_addr_list[n],pHostent->h_length);

SetDlgItemText(hwnd,IDC_EDITIP,inet_ntoa(sa.sin_addr));
}

    return TRUE;
}
DWORD WINAPI Threadrecv(LPVOID lpParam)
{

char recv_buf[1024];
recvfrom(sock,recv_buf,sizeof(recv_buf),0,(SOCKADDR*)&cli,sizeof(cli));
char buf[1024];
wsprintf(buf,"客户端说:%s",recv_buf);
SetDlgItemText(hwnd,IDC_EDITRECVM, buf);
return 0;
}
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch(id)
    {
        case IDC_SEND:
{

////////////////////////////////
//////////加载协议栈
//WSADATA wsadata;
// WSAStartup(MAKEWORD(2,2),&wsadata); //////////创建套接口

sock=socket(AF_INET,SOCK_DGRAM,0);
 //////////绑定地址
//SOCKADDR_IN sa,cli;
int iPort=6001;
sa.sin_family=AF_INET;
sa.sin_port=htons(iPort);
sa.sin_addr.s_addr=htonl(INADDR_ANY); bind(sock,(SOCKADDR*)&sa,sizeof(SOCKADDR));

////////////初始化接收缓冲区
char send_buf[1024];
char tempbuf[1024];

struct RECVTH
{
SOCKET sockrecv;
HWND hwndrecv;
SOCKADDR_IN clirecv; };
RECVTH *precvth=new RECVTH;
precvth->sockrecv=sock;
precvth->hwndrecv=hwnd;
precvth->clirecv=cli;

HANDLE hThread;
hThread=CreateThread(NULL,0,Threadrecv,(LPVOID)precvth,0,NULL);
CloseHandle(hThread);
///打印缓冲区中接收到的数据
          ///发送数据
GetDlgItemText(hwnd,IDC_EDITSEND,send_buf,sizeof(send_buf));
wsprintf(tempbuf,"%s",send_buf);
sendto(sock,send_buf,sizeof(send_buf),0,(SOCKADDR*)&cli,sizeof(cli));
SetDlgItemText(hwnd,IDC_EDITSEND, "");
////关闭套接字,释放协议栈

}
        break;
        default:
break;
    }
}void Main_OnClose(HWND hwnd)
{
closesocket(sock);
WSACleanup();
    EndDialog(hwnd, 0);
}错误:
error C2664: 'recvfrom' : cannot convert parameter 6 from 'unsigned int' to 'int *'
        Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.UDP服务器端.exe - 1 error(s), 0 warning(s)

解决方案 »

  1.   

    int recvfrom(
      SOCKET s,
      char FAR* buf,
      int len,
      int flags,
      struct sockaddr FAR* from,
      int FAR* fromlen
    );
      

  2.   


    recvfrom(sock,recv_buf,sizeof(recv_buf),0,(SOCKADDR*)&cli,&sizeof(SOCKADDR_IN));
      

  3.   


    纪检委员,这样不行吧,对sizeof操作符返回的数值进行取址?
    应该声明个变量
    int iSize = sizeof(SOCKADDR_IN);
    再&iSize
      

  4.   

    int iSize = sizeof(SOCKADDR_IN);recvfrom(sock,recv_buf,sizeof(recv_buf),0,(SOCKADDR*)&cli,&&iSize);