贵州大学课程设计报告
学院:明德学院 专业:信息安全 班级:071
程序源代码
头文件:
Comm.h:
#include"WinSock.h"
#define socklen_t int
#pragma comment(lib, "wsock32.lib")
class CComm
{
private:
SOCKET ListenSocket; //等待接收数据的socket
sockaddr_in srv; // 绑定地址
sockaddr_in client; // 发送数据过来的地址
public:
CComm();
~CComm();
static void ListenThread(void *data);
bool SendMsg(char *Msg, int Len, char *host, short port);
bool Listen(int PortNum);
};
stdafx.h:
// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
// TODO: 在此处引用程序需要的其他头文件
targetver.h:
#pragma once
// 以下宏定义要求的最低平台。要求的最低平台
// 是具有运行应用程序所需功能的Windows、Internet Explorer 等产品的
// 最早版本。通过在指定版本及更低版本的平台上启用所有可用的功能,宏可以
// 正常工作。
// 如果必须要针对低于以下指定版本的平台,请修改下列定义。
// 有关不同平台对应值的最新信息,请参考MSDN。
#ifndef _WIN32_WINNT // 指定要求的最低平台是Windows Vista。
#define _WIN32_WINNT 0x0600 // 将此值更改为相应的值,以适用于Windows 的其他版本。
#endif
源文件:
Comm.cpp:
#include "StdAfx.h"
#include "Comm.h"
CComm::CComm()
{
//构造函数
ListenSocket = INVALID_SOCKET; // 开始设置为INVALID_SOCKET
#ifdef _WIN32 // 如果是win32系统,则执行如下代码
WORD VersionRequested = MAKEWORD(1,1);//第一个参数为低位字节,第二个为高位字节,
//A or B shl 16,二进制为
//函数的结果是,也就是把两个byte组合成word型
WSADATA wsaData;//WSA为Windows Sockets API 的缩写
WSAStartup(VersionRequested, &wsaData); // 启动winsock服务
if ( wsaData.wVersion != VersionRequested )
{
printf("Wrong version or WinSock not loaded\n");
fflush(0); //fflush()函数的作用是:将所有的缓冲结果写入一个文件中
}
#endif
}
//析构函数
CComm::~CComm()
{
if (ListenSocket!=INVALID_SOCKET )
closesocket(ListenSocket); // 如果已经创建、则关闭
#ifdef _WIN32 // 调用WSACleanup
WSACleanup();
#endif
}
//地址绑定,注意在UDP协议中,不需要listen,这里函数listen只是绑定一个端口
bool CComm::Listen( int PortNum )
{
//创建socket
ListenSocket = socket(PF_INET, SOCK_DGRAM, 0);
if (ListenSocket ==INVALID_SOCKET )
{
printf("Error: socket创建失败\n");
fflush(0);
return false;
}
///设定地址
srv.sin_family = PF_INET;
srv.sin_addr.s_addr = htonl( INADDR_ANY ); // 任何地址
//绑定端口
srv.sin_port = htons(PortNum );
if (bind(ListenSocket,(struct sockaddr *)&srv, sizeof(srv)) != 0 )
{
printf("Error: 绑定失败\n");
fflush(0);
closesocket( ListenSocket );
return false;
}
int ThreadID; // 线程ID
DWORD thread;
//调用createthread创建线程
ThreadID = (int)CreateThread(NULL, 0,
(LPTHREAD_START_ROUTINE)(CComm::ListenThread),
(void *)this,0,
&thread );
ThreadID=ThreadID?0:1; // 如果成功,则返回为
if(ThreadID) // ThreadID如果不为,则线程创建失败
{
printf("线程创建失败\n");
return false;
}
else
return true;
}
void CComm::ListenThread( void *data )
{
char buf[4096];
CComm *Comm = (CComm *)data;
int len = sizeof(Comm->client); //////获得地址的长度
while(1) // 获取数据,一直循环
{
//接收数据
int result = recvfrom( Comm->ListenSocket, buf, sizeof(buf)-1, 0,
(sockaddr*)&Comm->client, (socklen_t *)&len);
if ( result > 0 )//////////////如果获得数据
{
buf[result] = 0;
//获得发送端的地址和端口号
printf("Message received from host %s port %i\n",
inet_ntoa(Comm->client.sin_addr),ntohs(Comm->client.sin_port));
printf(">> %s", buf); //输出接收到的数据
fflush(0);
}
}
}
bool CComm::SendMsg(char *Msg,int Len,char *host,short port )
{
signed int Sent;
hostent *hostdata;
if ( atoi(host) ) // 是否IP地址为标准形式
{
u_long ip = inet_addr( host );//将一个点间隔地址转换成一个in_addr
hostdata = gethostbyaddr((char *)&ip, sizeof(ip),PF_INET );// 返回对应于给定地址的主机信息
}
else// 否则可能是机器名
{
hostdata = gethostbyname( host );
}
if ( !hostdata )
{
printf("获得机器名错误\n");
fflush(0);
return false;
}
sockaddr_in dest; // 发送目标地址
dest.sin_family = PF_INET;
dest.sin_addr = *(in_addr *)(hostdata->h_addr_list[0]);
dest.sin_port = htons( port );//将主机的无符号短整形数转换成网络字节顺序
//该函数原形为u_short PASCAL FAR htons( u_short hostshort);
printf("信息已经被发送到主机%s 端口为%i\n",
inet_ntoa(dest.sin_addr), ntohs(dest.sin_port));
//数据发送
Sent = sendto(ListenSocket, Msg, Len, 0, (sockaddr *)&dest, sizeof(sockaddr_in));
if( Sent != Len )
{
printf("错误发送UDP信息\n");
fflush(0);
return false;
}
else
return true;
}
stdafx.cpp:
// stdafx.cpp : 只包括标准包含文件的源文件
// wyh.pch 将作为预编译头
// stdafx.obj 将包含预编译类型信息
#include "stdafx.h"
// TODO: 在STDAFX.H 中
// 引用任何所需的附加头文件,而不是在此文件中引用
Wyh.cpp:
// why.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include"Comm.h"
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
char buffer[4096]; //缓冲区
short listeningport; //要绑定的绑定接收端口
short destport; //要发送的对方端口
char *desthost; //目标端口
printf("Initialization...\n");
listeningport=2000; //设定UDP绑定端口,这里是监听端口,也是另外程序的发送端口
destport=3000; //设定发送端口,也是另外一个程序的监听端口
desthost="192.168.2.59"; //设定目标地址
CComm myComm;
if(!myComm.Listen(listeningport)) //绑定地址
{
printf("端口%d绑定失败\n",listeningport);
return 0;
}
printf("聊天程序成功建立:<Ctrl_C>退出\n\n");
while(fgets(buffer,sizeof(buffer),stdin)) //获得输入数据
{ //发送数据到目标地址
myComm.SendMsg(buffer,strlen(buffer),desthost,destport);
}
return 0;
}
C++程序设计(下)
——对话框控件的高级应用
姓 名: 吴明仕
班 级: 1020551
学 号: 33
指导老师: 孔 令 德
时间:20##年12月6日
一、设计描述
该设计充分利用控件的不同属性实现“变幻莫测”的功能。在左边的“测试文本框属性栏”单击相应的单选按钮可以是文本编辑框处于“可以输入”、“不能输入”或者“隐藏”的状态。在图片变换栏上的图标上单击鼠标,可以实现图标的切换。启动进度条,在进度条推进过程中图片变换栏的图标会自动变换。通过点击确定可以退出该控件应用。
程序完成后如图1所示。(图1)
二、设计分析
1.执行VC程序,选择FileNew命令,弹出New对话框,单击工程标签,转到工程选项卡,选择MFC AppWizard(exe),然后在工程名称文本框中输入“对话框控件的高级应用”,单击确定后在弹出的MFC应用程序向导中选择基本对话框 (图2)
2.点击完成进行编程。
3.进行编程是还需将“启动键”、“进度条”、“图片”以及“文本编辑框”等的属性。
3.1、启动键的属性修改如下图。
3.2、进度条的属性修改如下图。
3.3、图片的属性修改如下图。
3.4.文本编辑框的属性修改如下图。
4、属性修改完后按Ctrl+W进入MFC ClassWizard的Message Maps为锁所增添的文件添加映射,然后再Member Variables中设置如下图
5、程序的最终运行 效果如下图所示。
三、源代码
1,定义全局变量
m_str = _T("");
m_str="测试一下CEdit控件的功能";
m_tag=FALSE;
m_Progress=0;
2,为添加的文件添加函数代码
// TODO: Add extra initialization here
GetDlgItem(IDC_EDIT1)->EnableWindow(FALSE);
UpdateData(FALSE);
m_ComboBox.AddString("亚龙湾");
m_ComboBox.AddString("石梅湾");
m_ComboBox.AddString("日月湾");
m_ComboBox.AddString("五指山");
m_ComboBox.SetCurSel(1);
CProgressCtrl * pProgress=(CProgressCtrl *)GetDlgItem(IDC_PROGRESS1);
pProgress->SetRange(0,50);
pProgress->SetPos(0);
return TRUE;
}
void CExDlg::OnPic()
{
// TODO: Add your control notification handler code here
if(m_tag==FALSE)
{
m_icon.SetIcon(AfxGetApp()->LoadIcon(IDI_ICON2));
m_tag=TRUE;
}
else
{
m_icon.SetIcon(AfxGetApp()->LoadIcon(IDI_ICON1));
m_tag=FALSE;
}
}
void CExDlg::OnRadio1()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_EDIT1)->EnableWindow(TRUE);
GetDlgItem(IDC_EDIT1)->ShowWindow(SW_SHOW);
UpdateData(FALSE);
}
void CExDlg::OnRadio2()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_EDIT1)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT1)->ShowWindow(SW_SHOW);
UpdateData(FALSE);
}
void CExDlg::OnRadio3()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_EDIT1)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE);
UpdateData(FALSE);
}
void CExDlg::OnCloseupCombo1()
{
// TODO: Add your control notification handler code here
m_str.Empty();
m_str="运行关闭下拉菜单函数";
OnRadio1();
UpdateData(FALSE);
}
void CExDlg::OnStart()
{
// TODO: Add your control notification handler code here
m_timer=SetTimer(1,50,NULL);
}
void CExDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your control notification handler code here
CProgressCtrl * pProgress=(CProgressCtrl *)GetDlgItem(IDC_PROGRESS1);
pProgress->SetPos(++m_Progress);
if(m_Progress%5==0)
OnPic();
if(m_Progress>=50)
KillTimer(m_timer);
}
四、设计总结
我做的是“对话框的控件高级应用”。通过这一次的课程设计,我巩固了上课时所学过的有关对话框方面的知识,同时还通过查找学到了课上没有涉及的知识!感受到了课外知识的重要性,可谓是受益匪浅。
东莞理工学院《C语言程序设计》课程设计题目:图书信息管理系统院系:电子工程学院专业:电子信息工程年级:20##班别:2班指导教师:…
C语言程序设计课程设计学生姓名学号系院专业设计论文题目学生选课系统管理完成日期20xx年6月指导教师目录一实验目的二实验内容三总体…
河南理工大学计算机科学与技术学院课程设计报告20XX20XX学年第一学期课程名称C语言课程设计设计题目《小学算术运算测试》学生姓名…
C语言课程设计报告设计题目专业班级学号姓名任课老师时间目录一课程设计题目及所涉及知识点二课程设计思路及设计流程图三课程设计中遇到的…
C语言程序设计课程设计报告20xx20xx学年第1学期题目专业班级姓名学号指导教师成绩计算机科学与技术系20xx年12月31日目录…
计算机科学与工程学院项目报告设计名称Windows程序设计综合项目设计题目学生学号专业班级学生姓名xxxxxxxx学生成绩指导教师…
华北科技学院课程设计说明书班级姓名设计题目设计时间指导教师评语评阅成绩评阅教师华北科技学院课程设计说明书目录第1章绪论111选题的…
河海大学计算机及信息工程学院常州MFC课程设计报告题目聊天室程序设计学号20xx2325专业计算机科学与技术授课班号243002学…
中南大学本科生课程设计(实践)任务书、设计报告(C++语言程序设计)题目:统计稿件管理数据程序设计计算机基础教学实验中心20##年…
山东中医药大学理工学院课程设计报告课程名称高级语言课程设计课程代码07300561设计内容汉诺塔演示系统二0一二年12月21日1目…