test1.h
public:
SOCKET m_socket;
//初始化网络
bool OnInitSocket(void);
//发送消息
bool OnSendSocket(void);
test1.cpp
bool CTest1::OnInitSocket( void )
{
WSADATA wsadata;
WSAStartup(MAKEWORD(2,2),&wsadata);
m_socket=WSASocket(AF_INET,SOCK_DGRAM,0,0,0,0);
if(INVALID_SOCKET==m_socket)
{
MessageBox(win.hwnd,TEXT("创建套接字失败"),NULL,MB_OK);
return FALSE;
}
SOCKADDR_IN sockaddr;
sockaddr.sin_family=AF_INET;
sockaddr.sin_port=htons(6000);
sockaddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
if (bind(m_socket,(SOCKADDR*)&sockaddr,sizeof(SOCKADDR))==SOCKET_ERROR)
{
MessageBox(win.hwnd,TEXT("绑定失败"),NULL,MB_OK);
return FALSE;
}
if (WSAAsyncSelect(m_socket,win.hwnd,WM_SOCKMSG,FD_READ|FD_WRITE|FD_ACCEPT|FD_CONNECT|FD_CLOSE)==SOCKET_ERROR)
{
MessageBox(win.hwnd,TEXT("网络事件注册失败"),NULL,MB_OK);
return FALSE;
}
return TRUE;
}
bool CTest1::OnSendSocket( void )
{
TCHAR szTemp[32]={0};
tstring strHostName;
DWORD dwIP;
hostent *phostname;
SOCKADDR_IN sockaddr;
sockaddr.sin_family=AF_INET;
sockaddr.sin_port=htons(6000);
if (GetDlgItemText(win.hwnd,IDC_EDIT3,szTemp,sizeof(szTemp))==NULL)
{
//((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))->GetAddress(dwIP);
SendMessage(GetDlgItem(win.hwnd,IDC_IPADDRESS1),IPM_GETADDRESS,0,(LPARAM)&dwIP);
sockaddr.sin_addr.S_un.S_addr=htonl(dwIP);
}
else
{
phostname=gethostbyname(szTemp);
sockaddr.sin_addr.S_un.S_addr=*((DWORD*)phostname->h_addr_list[0]);
}
TCHAR szSendBuf[128]={0};
GetDlgItemText(win.hwnd,IDC_EDIT2,szSendBuf,sizeof(szSendBuf));
int nlen=_tcslen(szSendBuf);
SetDlgItemText(win.hwnd,IDC_EDIT2,TEXT(""));
DWORD dwSend;
WSABUF wsabuf={0};
wsabuf.buf=new char[nlen];
memcpy(wsabuf.buf,szSendBuf,nlen);
wsabuf.len=nlen;
if (WSASendTo(m_socket,&wsabuf,1,&dwSend,0,(SOCKADDR*)&sockaddr,sizeof(SOCKADDR),NULL,NULL)==SOCKET_ERROR )
{
MessageBox(win.hwnd,TEXT("数据发送失败"),NULL,MB_OK);
return FALSE;
}
return TRUE;
}
main.cpp
case WM_SOCKMSG:
{
switch(LOWORD(lParam))
{
case FD_READ:
{
WSABUF wsabuff;
wsabuff.buf=new char[200];
wsabuff.len=200;
ZeroMemory(wsabuff.buf,200);
DWORD dwRead;
DWORD dwFlag=0;
SOCKADDR_IN sockaddr;
int nlen=sizeof(SOCKADDR);
if (WSARecvFrom(CTest1::GetInstance()->m_socket,&wsabuff,1,&dwRead,&dwFlag,(SOCKADDR*)&sockaddr,&nlen,NULL,NULL)==SOCKET_ERROR)
{
MessageBox(win.hwnd,TEXT("接收数据失败"),NULL,MB_OK);
return false;
}
HOSTENT *pHost=gethostbyaddr((char*)&sockaddr.sin_addr.S_un.S_addr,4,AF_INET);
TCHAR szText[256]={0},szTemp[128]={0};
_sntprintf_s(szText,sizeof(szText),TEXT("%s说:%s\r\n"),pHost->h_name,wsabuff.buf);
GetDlgItemText(win.hwnd,IDC_EDIT1,szTemp,sizeof(szTemp));
_tcscat(szText,szTemp);
SetDlgItemText(win.hwnd,IDC_EDIT1,szText);
delete []wsabuff.buf;
}
break;
case FD_WRITE:
break;
case FD_CLOSE:
break;
case FD_ACCEPT:
break;
case FD_CONNECT:
break;
}
}
break;