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

📄 fun1dlg.cpp

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

#include "stdafx.h"
#include "client.h"
#include "clientDoc.h"
#include "clientView.h"
#include "Fun1Dlg.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

/////////////////////////////////////////////////////////////////////////////
// CFun1Dlg dialog


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


void CFun1Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CFun1Dlg)
	DDX_Control(pDX, IDC_FUN1_x2, m_nFun1x2);
	DDX_Control(pDX, IDC_FUN1_x1, m_nFun1x1);
	DDX_Control(pDX, IDC_FUN1_c, m_nFun1c);
	DDX_Control(pDX, IDC_FUN1_b, m_nFun1b);
	DDX_Control(pDX, IDC_FUN1_a, m_nFun1a);
	//}}AFX_DATA_MAP
}


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

/////////////////////////////////////////////////////////////////////////////
// CFun1Dlg 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 CFun1Dlg::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_nFun1a.GetWindowText(strFun1a);
	m_nFun1b.GetWindowText(strFun1b);
	m_nFun1c.GetWindowText(strFun1c);
    //定义要传送到的地址结构:
	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=1;
	strcpy(p.a,strFun1a);
	strcpy(p.b,strFun1b);
	strcpy(p.c,strFun1c); 
    //定义接受和发送两个缓冲区:
    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<=1)
			{
            m_nFun1x1.SetWindowText(q.x1);
	        m_nFun1x2.SetWindowText(q.x2);
			}
			else
			{
	    	MessageBox("判别式小于零,没有实根");
			}
			break;
	  }
	}
	closesocket(clienSock);
	WSACleanup();
}

⌨️ 快捷键说明

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