⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 udpdlg.cpp

📁 tcpudp通信源码 AppWizard uses "TODO:" to indicate parts of the source code you should add to or custom
💻 CPP
字号:
// UDPdlg.cpp : implementation file
//

#include "stdafx.h"
#include "通信.h"
#include "UDPdlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CUDPdlg dialog


CUDPdlg::CUDPdlg(CWnd* pParent /*=NULL*/)
	: CDialog(CUDPdlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CUDPdlg)
	m_ip1 = _T("");
	m_ip2 = _T("");
	m_port1 = 0;
	m_port2 = 0;
	m_state = _T("");
	m_sendmsg = _T("");
	//}}AFX_DATA_INIT
}


void CUDPdlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CUDPdlg)
	DDX_Control(pDX, IDC_LIST1, m_list);
	DDX_Text(pDX, IDC_IP1, m_ip1);
	DDX_Text(pDX, IDC_IP2, m_ip2);
	DDX_Text(pDX, IDC_PORT1, m_port1);
	DDX_Text(pDX, IDC_PORT2, m_port2);
	DDX_Text(pDX, IDC_STATE, m_state);
	DDX_Text(pDX, IDC_SENDMSG, m_sendmsg);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CUDPdlg, CDialog)
	//{{AFX_MSG_MAP(CUDPdlg)
	ON_BN_CLICKED(IDC_CONFIG, OnConfig)
	ON_BN_CLICKED(IDC_SEND, OnSend)
	//}}AFX_MSG_MAP
	ON_MESSAGE(RECEIVE_EVENT,OnEvent) //消息映射
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CUDPdlg message handlers

void CUDPdlg::OnConfig() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	if(m_port1==0)
	{
	   MessageBox("请设置本机通信端口!");
	   return;
	}
	if(m_ip2==""||m_port2==0)
		MessageBox("请设置对方IP地址和通信端口!");
	else 
	{
	  m_udpsock.Create(m_port1,SOCK_DGRAM,m_ip1);
	  m_udpsock.Bind(m_port1,m_ip1);
	  WSAAsyncSelect(m_udpsock,GetSafeHwnd(),RECEIVE_EVENT,FD_READ);
	  m_state="设置完毕";
	}
	UpdateData(FALSE);
}

void CUDPdlg::OnSend() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	int iSend=m_udpsock.SendTo(m_sendmsg,20,m_port2,m_ip2,0);
	TRACE("sent %d byte\n",iSend);
}

CString CUDPdlg::GetIP()
{
   WORD wVersionRequested;
  WSADATA wsaData;
  char name[255];    // 本地主机名字符数组变量
  CString m_ip;      // IP地址字符串变量
  PHOSTENT hostinfo;  // hostent结构指针
  wVersionRequested=MAKEWORD(2,0);   //连接应用程序与winsock Dll
  if(WSAStartup(wVersionRequested,&wsaData)==0)
  { 
	  if(gethostname(name,sizeof(name))==0)  //得到本地主机名

      {  if((hostinfo=gethostbyname(name))!=NULL) //得到主机信息
	     { m_ip=inet_ntoa(*(struct in_addr *)*hostinfo->h_addr_list); //转换得到IP地址
         }
	       else m_ip="IP检测失败";
	  
	  }	 
             WSACleanup();   // 中止winsock DLL的使用
  }
          return m_ip;  //返回IP地址字符串
}

BOOL CUDPdlg::DestroyWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
	m_udpsock.Close();    //关闭socket
	return CDialog::DestroyWindow();
}

BOOL CUDPdlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	CString localIP;
	localIP=GetIP();   //得到本机IP
	SetDlgItemText(IDC_IP1,localIP);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CUDPdlg::OnEvent(WPARAM wParam, LPARAM lParam)
{
    switch(lParam)
	{
	  case FD_READ:
		  {
		    CString m_receive;
			char szRecv[30];
			int iRecv=m_udpsock.ReceiveFrom(szRecv,20,m_ip2,m_port2,0);
			m_receive=szRecv;
			TRACE("received %d byte\n",iRecv);
			m_state="收到数据";
			m_list.AddString(m_receive);
		  }
		  break;

	}
	     UpdateData(FALSE);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -