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

📄 receivedlg.cpp

📁 MFC模拟计算机网络中停止等待协议的发送接收数据的功能
💻 CPP
字号:
// receiveDlg.cpp : implementation file
//

#include "stdafx.h"
#include "receive.h"
#include "receiveDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CReceiveDlg dialog

CReceiveDlg::CReceiveDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CReceiveDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CReceiveDlg)
	m_receive = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CReceiveDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CReceiveDlg)
	DDX_Control(pDX, IDC_LIST_RECV, m_ctrList);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CReceiveDlg, CDialog)
	//{{AFX_MSG_MAP(CReceiveDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON_START, OnButtonStart)
	ON_BN_CLICKED(IDC_BUTTON, OnButton)
	//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CReceiveDlg message handlers

BOOL CReceiveDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	InitCtrol();
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CReceiveDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CReceiveDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CReceiveDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CReceiveDlg::OnButtonStart() 
{
	// TODO: Add your control notification handler code here
	

	sockSrv=socket(AF_INET,SOCK_STREAM,0);

//	SOCKADDR_IN addrSrv;
	addrSrv.sin_family=AF_INET;
	addrSrv.sin_addr.S_un.S_addr=htons(INADDR_ANY);
	addrSrv.sin_port=htons(6000);

	bind(sockSrv,(SOCKADDR *)&addrSrv,sizeof(SOCKADDR));

/*	listen(sockSrv,5);

	while(true)
	{
		CString str="";
		char recvBuf[100];
		SOCKADDR_IN addrClient;
		int len=sizeof(SOCKADDR);
		
		SOCKET sockClient=accept(sockSrv,(SOCKADDR *)&addrClient,&len);

		recv(sockClient,recvBuf,100,0);
		if(recvBuf[0]=='0')
		{
			str+=recvBuf[1];
			MessageBox(str);

		}

		closesocket(sockClient);
	}*/

/*	char recvbuff[100];
	CString str="";
	str+=recvbuff;

	recv(sockClient,recvbuff,100,0);
//	m_recvive=recvbuff;
	SetDlgItemText(IDC_EDIT_RECV,str);*/

/*	recvParam *pRec=new  recvParam;
	pRec->hwnd=m_hWnd;
	pRec->socket=sockSrv;
	HANDLE thread=CreateThread(NULL,0,RecvProc,(LPVOID)pRec,0,NULL);
	CloseHandle(thread);*/

}

void CReceiveDlg::OnButton() 
{
	// TODO: Add your control notification handler code here
	
	CDialog::OnOK();
}


//DEL void CReceiveDlg::OnPostData(WPARAM wParam,LPARAM lParam)
//DEL {	
//DEL 	 CString str=(char *)lParam;
//DEL /*	 CString temp;
//DEL 	 GetDlgItemText(IDC_EDIT_RECV,temp);
//DEL 
//DEL 	 str+="\r\n";
//DEL 
//DEL 	 str+=temp;
//DEL 	 SetDlgItemText(IDC_EDIT_RECV,str);*/
//DEL 	 CString str1="收到数据 ";
//DEL 	 CString str2="返回ACK";
//DEL //	 CString str3="";
//DEL 	 if(str.GetAt(1)=='0')
//DEL 	 {
//DEL //		 str3+=str.GetAt(2);
//DEL 		 if(str.GetAt(0)=='0')
//DEL 		 {
//DEL 			 str1+=str.GetAt(2);
//DEL 			 m_ctrList.DeleteAllItems();
//DEL 			 nItem=0;
//DEL 			 m_ctrList.SetItemText(2*nItem,0,str1);
//DEL 			 m_ctrList.SetItemText(2*nItem+1,0,str2);
//DEL 		 }
//DEL 		 else
//DEL 		 {
//DEL 			 str1+=str.GetAt(2);
//DEL 			 m_ctrList.SetItemText(2*nItem,0,str1);
//DEL 			 m_ctrList.SetItemText(2*nItem+1,0,str2);
//DEL 		 }
//DEL 	 }
//DEL 
//DEL 
//DEL }


//DEL DWORD WINAPI CReceiveDlg::RecvProc(LPVOID lpPrameter)
//DEL {
//DEL 	SOCKET socket=((recvParam *)lpPrameter)->socket;
//DEL 	HWND   hwnd=((recvParam *)lpPrameter)->hwnd;
//DEL 
//DEL 	delete lpPrameter;
//DEL 	
//DEL 	SOCKADDR_IN addrFrom;
//DEL //	int len=sizeof(SOCKADDR);
//DEL 
//DEL 	addClient=connect(sockSrv,(SOCKADDR *)&addrFrom,sizeof(SOCKADDR));
//DEL 
//DEL 	char recvBuff[100];
//DEL 	int i=0;
//DEL //	int retval;
//DEL 	while(TRUE)
//DEL 	{
//DEL /*		retval=recvfrom(socket,recvBuf,200,0,(SOCKADDR*)&addrFrom,&len);
//DEL 		if(retval==SOCKET_ERROR)
//DEL 			break;	
//DEL 	
//DEL      	CString temp="";
//DEL 
//DEL 		temp+=recvBuf[0];
//DEL 		if(temp=="e")
//DEL 		sendto(socket,"重新发送数据 返回NCK",strlen("重新发送数据 返回NCK")+1,0,(SOCKADDR *)&addrFrom,sizeof(SOCKADDR));
//DEL 		else if(temp=="l")
//DEL 		sendto(socket,"数据丢失 返回NCK",strlen("数据丢失 返回NCK")+1,0,(SOCKADDR *)&addrFrom,sizeof(SOCKADDR));
//DEL 		else
//DEL 		{
//DEL 			temp+="已收到 返回ACK";
//DEL 			sendto(socket,temp,temp.GetLength()+1,0,(SOCKADDR *)&addrFrom,sizeof(SOCKADDR));
//DEL 		}*/
//DEL 
//DEL 		recv(addClient,recvBuff,100,0);
//DEL 		if(recvBuff[0]=='1')
//DEL 		{
//DEL 
//DEL 		}
//DEL 		::PostMessage(hwnd,WM_POSTDATA,0,(LPARAM)recvBuff);
//DEL 		::Sleep(1000);
//DEL 		nItem++;
//DEL 
//DEL 	}
//DEL     return 0;
//DEL }

void CReceiveDlg::InitCtrol()
{
	DWORD dwExStyle = LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES |
		LVS_EX_HEADERDRAGDROP | LVS_EX_ONECLICKACTIVATE | LVS_EX_UNDERLINEHOT;
	m_ctrList.SetExtendedStyle(dwExStyle);


	RECT rect;
	m_ctrList.GetWindowRect(&rect);

	int width=rect.right-rect.left;
	m_ctrList.SetColumnWidth(0,width);
}

⌨️ 快捷键说明

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