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

📄 fun2dlg.cpp

📁 用MFC 开发的基于UDP协议的网络科学计算中心,比较适用于局域网内
💻 CPP
字号:
// Fun2Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "client.h"
#include "clientDoc.h"
#include "clientView.h"
#include "Fun2Dlg.h"
#include "winsock2.h"
#pragma comment (lib,"ws2_32.lib")

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

/////////////////////////////////////////////////////////////////////////////
// CFun2Dlg dialog


CFun2Dlg::CFun2Dlg(CWnd* pParent /*=NULL*/)
	: CDialog(CFun2Dlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CFun2Dlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CFun2Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CFun2Dlg)
	DDX_Control(pDX, IDC_ROOTINFO, m_nRootInfo);
	DDX_Control(pDX, IDC_FUN2_y, m_nFun2y);
	DDX_Control(pDX, IDC_FUN2_x, m_nFun2x);
	DDX_Control(pDX, IDC_FUN2_n, m_nFun2n);
	DDX_Control(pDX, IDC_FUN2_m, m_nFun2m);
	DDX_Control(pDX, IDC_FUN2_d, m_nFun2d);
	DDX_Control(pDX, IDC_FUN2_c, m_nFun2c);
	DDX_Control(pDX, IDC_FUN2_b, m_nFun2b);
	DDX_Control(pDX, IDC_FUN2_a, m_nFun2a);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CFun2Dlg, CDialog)
	//{{AFX_MSG_MAP(CFun2Dlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFun2Dlg message handlers
struct sendParam
{
	int flag;
	char a[10];
	char b[10];
	char c[10];
	char d[10];
	char m[10];
	char n[10];
};
struct recvParam
{
	int flag;
	char x1[10];
	char x2[10];
};

void CFun2Dlg::OnOK() 
{
	// TODO: Add extra validation here
	//Socket 初始化:
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;
	wVersionRequested = MAKEWORD( 2, 2 );
	err = WSAStartup( wVersionRequested, &wsaData );
	if ( err != 0 ) {
		/* Tell the user that we could not find a usable */
		/* WinSock DLL.                                  */
		return;
	}
    //定义客户端Socket:
	SOCKET clienSock = socket(AF_INET,SOCK_DGRAM,0);
	if(clienSock == INVALID_SOCKET)
	{
		MessageBox("Create socket Error");
		return;
	}
	//获得编辑框的输入值:
	m_nFun2a.GetWindowText(strFun2a);
	m_nFun2b.GetWindowText(strFun2b);
	m_nFun2c.GetWindowText(strFun2c);
	m_nFun2d.GetWindowText(strFun2d);
	m_nFun2m.GetWindowText(strFun2m);
	m_nFun2n.GetWindowText(strFun2n);
	//定义要传送到的地址结构:
	sockaddr_in to_addr;
	to_addr.sin_family = AF_INET;
	to_addr.sin_port = htons(8341);
	to_addr.sin_addr.S_un.S_addr = inet_addr(CClientView::strServer);
	//给要发送的数据报付值:
	sendParam p;
	p.flag=2;
	strcpy(p.a,strFun2a);
	strcpy(p.b,strFun2b);
	strcpy(p.c,strFun2c); 
	strcpy(p.d,strFun2d);
	strcpy(p.m,strFun2m);
	strcpy(p.n,strFun2n); 
	//定义接受和发送两个缓冲区:
    char sendbuf[100];
	char recvbuf[100];
    //将数据报copy到发送缓冲区:
    memcpy(sendbuf,&p,sizeof(p));
	//获得发送地址结构的长度:
	int len=sizeof(to_addr);

	//发送数据:
	if(SOCKET_ERROR  == sendto(clienSock,sendbuf,sizeof(sendbuf),0,(sockaddr*)&to_addr,len))
	{                 
		MessageBox("Send Error");
		return;
	}
    else
	{
	//接受服务器的传回值:
       while(1)
	   {
	    	recvfrom(clienSock,recvbuf,sizeof(recvbuf),0,(sockaddr*)&to_addr,&len);
	    	recvParam q;
	    	memcpy(&q,recvbuf,sizeof(q)+1);
            if(q.flag == 0)
			{
                m_nFun2x.SetWindowText(q.x1);
    	        m_nFun2y.SetWindowText(q.x2);
				m_nRootInfo.SetWindowText("x有唯一解,y有唯一解.");
			}
			else if(q.flag == 1)
			{
				m_nFun2x.SetWindowText("");
				m_nFun2y.SetWindowText(q.x2);
                m_nRootInfo.SetWindowText("y有唯一解,x为任意解.");
			}
			else if(q.flag == 2)
			{
				m_nFun2x.SetWindowText(q.x1);
				m_nFun2y.SetWindowText("");
                m_nRootInfo.SetWindowText("x有唯一解,y为任意解.");
			}
			else if(q.flag == 3)
			{
				m_nFun2x.SetWindowText("");
				m_nFun2y.SetWindowText("");
				m_nRootInfo.SetWindowText("x与y有无穷解.");
			}
			else
			{
				m_nFun2x.SetWindowText("");
				m_nFun2y.SetWindowText("");
                m_nRootInfo.SetWindowText("此方程组无解.");
			}
			break;
	  }
	}
	closesocket(clienSock);
	WSACleanup();
}

⌨️ 快捷键说明

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