C++软件开发技术.docx
《C++软件开发技术.docx》由会员分享,可在线阅读,更多相关《C++软件开发技术.docx(35页珍藏版)》请在冰点文库上搜索。
C++软件开发技术
软件开发技术
专业:
检测技术及自动化装置
题目:
一.利用VC6.0编写一个能对字符串按任意字符进行分割的函数,并将该函数以动态链接库形式进行导出,并写一个基于对话框的程序进行测试
二.用VC编写一个时钟的ActiveX控件,该控件具有以下功能
1.时钟显示功能格式为:
年月日时:
分:
秒,每秒钟刷新一次
2.每分钟产生一个分钟事件
3.每小时产生一个小时事件
4.返回当前系统时间功能
5.返回控件创建到现在的秒数
6.时间相加功能(DATEADD)
7.时间相减功能(DATEDIFF)
三.用VC编写一个客户端和服务器端(采用TCP,或UDP协议,具体的实现协议自定),具有以下的系统维护功能:
1.客户端输入命令"ShowAllProcess"列出服务器所在计算机上的所有运行的进程名和进程号,将这些信息返回给客户端。
2.客户端通过输入”ShowProcess程序名“将服务器上对应的程序是否在运行的结果返回给客户端。
3.客户端通过输入”KillProcess程序名“将服务器上对应的程序删除,并将成功与否的结果返回给客户端。
4.客户端通过输入“CreateProcess程序名”将启动服务器上对应的程序,并将成功与否的结果返回给客户端。
5.客户端通过输入"ReStartComputer“将服务器计算机重启
6.客户端通过输入"ShowSysTemInformation”将服务器上的CPU内存和硬盘使用率返回给客户端
要求:
写出每道题的解题思路,主要函数说明,运行或测试结果。
即将你的思考过程和运行结果清楚地写出来。
例如:
1、字符串按任意字符的分割
(1)任意字符分割的解题思路即实现原理为:
(2)Split函数代码
(3)测试程序的设计
(4)运行结果
一.利用VC6.0编写一个能对字符串按任意字符进行分割的函数
1.任意字符分割的解题思路即实现原理为:
定义split函数对字符串进行分割,先检测字符串中的“:
”分隔符,把检测到“:
”分隔符的字符串先后分开输出,再检测字符串中的“”分隔符,把检测到“”分隔符的字符串先后分开输出,通过反复调用split分割函数实现对输入字符串的分割。
2.Split函数代码
#include
voidsplit(char*src,constchar*separator,char**dest,int*num)
{
char*pSeparator,*pStart,*pEnd;
unsignedintsep_len;
intcount=0;
if(src==NULL||strlen(src)==0)return;
pSeparator=(char*)malloc(16);
if(pSeparator==NULL)return;
if(separator==NULL||strlen(separator)==0)strcpy(pSeparator,"");/*oneblankbydefault*/
elsestrcpy(pSeparator,separator);
sep_len=strlen(pSeparator);
pStart=src;
while
(1)
pEnd=strstr(pStart,pSeparator);
if(pEnd!
=NULL)
memset(pEnd,'\0',sep_len);
*dest++=pStart;
pEnd=pEnd+sep_len;
pStart=pEnd;
++count;
}
else
*dest=pStart;
break;
*num=count;
if(pSeparator!
=NULL)free(pSeparator);
intmain()
charsrc[]="Accsvr:
tcp:
-h127.0.0.1-p20018";
char*dest[128];
char*dest2[128];
intnum=0,num2=0;
inti,j;
split(src,":
",dest,&num);
for(i=0;i{printf("|%s|\n",dest[i]);split(dest[i],"",dest2,&num2);for(j=0;j{printf("|%s|\n",dest2[j]);}}return0;}3.分割字符串函数以动态链接库DLL形式进行导出,以一个基于对话框的程序进行测试1.新建Win32Dynamic-LinkLabrary,名称split3建立一个简单的工程,其余默认,完成。2.添加函数在头文件StdAfx.h添加输出导数声明#defineEXPORT__declspec(dllexport)extern"C"EXPORTvoid__stdcallsplit(char*src,constchar*separator,char**dest,int*num);3.在源文件SourceFiles中添加典型的输出模块定义split3.defLIBRARYdh.dllEXPORTSsplit=split 4.在源文件SourceFiles中添加分割函数void__stdcallsplit(char*src,constchar*separator,char**dest,int*num){char*pNext;intcount=0;if(src==NULL||strlen(src)==0)return;if(separator==NULL||strlen(separator)==0)return;pNext=strtok(src,separator);while(pNext!=NULL){*dest++=pNext;++count;pNext=strtok(NULL,separator);}*num=count;}5.点击F7编译生成连接调用DLL所需的实际代码文件split3.dll和导入库文件split3.lib6..点击MicrosoftVisualC++6.0,新建MFCAppWizard(exe),工程名称split4,选择基本对话框,完成。创建对话框。7.点击查看,建立类导向,将IDC_EDIT1和IDC_EDIT2分别添加成员变量,并命名为m_edit1和m_edit2,OK。8.在声明区添加指针声明typedefint(_stdcall*funspliter)(char*src,constchar*separator,char**dest,int*num); 9.在voidCSplit4Dlg::OnButton1()中添加完整的加载DLL,调用DLL中的导出函数,显示在对话框,卸载DLL的函数,之后编译。HMODULEhMod=LoadLibrary("split3.dll");if(hMod!=NULL){funsplitershowspliter;showspliter=(funspliter)GetProcAddress(hMod,"split");if(showspliter){charsrc[100];//="tttttttttttt*uuuuuuuuuuuuuu"/*(char*)m_edit1.GetBuffer(0)*/;UpdateData(TRUE);intstrLength1=m_edit1.GetLength()+1;//charchArray[100];memset(src,0,sizeof(bool)*100);//将数组的垃圾内容清空.strncpy(src,m_edit1,strLength1);char*dest[128];char*dest2[128];intnum=0,num2=0;inti,j;charddd[100];UpdateData(TRUE);intstrLength2=m_edit2.GetLength()+1;memset(ddd,0,sizeof(bool)*100);strncpy(ddd,m_edit2,strLength2);showspliter(src,ddd,dest,&num);for(i=0;i{//printf("|%s|\n",dest[i]);AfxMessageBox(dest[i]);/*showspliter(dest[i],"\t\n",dest2,&num2);for(j=0;j{//printf("|%s|\n",dest2[j]);AfxMessageBox(dest2[j]);}*/}}}FreeLibrary(hMod);}10.将split3中的实际代码文件split3.dll和导入库文件split3.lib,复制到split4的根目录。4.运行结果分割情况:二.用VC编写一个时钟的ActiveX控件1.时钟的ActiveX控件的解题思路即实现原理为新建MFCAppWizard(exe)工程,自动生成一个简单对话框,其中应包含字符串输入框,分隔符输入框,分割后字符串输出框,确认按钮。相应的函数应在确认按钮的响应函数中被调用。通过#pragmacomment(lib,"dd.lib")告诉执行文件动态链接库路径。并声明所以调用的函数。2.函数代码及测试程序的设计1.建立新的MFCActiveXControlWizard工程,默认完成。2.编译后对Debug文件中生成的Bsm_Clock.ocx控件进行注册,点击运行后输入regsvr32/uC:\Users\lenovo\Desktop\C++练习\BSM_Clock\Debug\BSM_Clock.ocx注册成功(WIN7操作系统需要在安全模式下注册)3.运行4.选择ActiveXControlTextContainer后确定,出现测试模板后选择Edit->Insertnewcontrol5.在OnDraw中填写输出系统当前时间(年月日时分秒)的函数voidCBsm_ClockCtrl::OnDraw(CDC*pdc,constCRect&rcBounds,constCRect&rcInvalid){//TODO:Replacethefollowingcodewithyourowndrawingcode.pdc->FillRect(rcBounds,CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));//pdc->Ellipse(rcBounds);CTimetime=CTime::GetCurrentTime();CStringstr=time.Format("%Y年%m月%d日%H:%M:%S");pdc->TextOut(0,0,str);}设置动态时间,对定时器进行设置,右键点击CBsm_ClockCtrl选择AddWindowsMseeageHandler->分别选择WM_CREATE和WM_TIMER->AddHandler在OnCreate下填写SetTimer(1,1000,NULL);对时间每秒更新一次,在OnTimer下填写InvalidateControl();重绘整个窗口,完成对动态实时时钟的设置。6.每分钟产生一个分钟事件,每小时产生一个小时事件点击View->ClassWizard->ActiveXEvents,建立Stock标准事件,Bsm_NewMinute,Bsm_NewHour在OnDraw中CTimetime=CTime::GetCurrentTime();下添加if((0==time.GetSecond())&&(0!=time.GetMinute())){FireBsm_NewMinute();}if((0==time.GetSecond())&&(0==time.GetMinute())){FireBsm_NewHour();}产生一个分钟事件产生一个小时事件7.返回空间创建到现在的时间为BSM_Clock控件添加一个自定义的方法,用来显示控件运行时间。点击View->ClassWizard->Automation->AddMethod->如图,OK在BSM_ClockCtl.h头文件中添加定义:#include//time_tbegin,end;doubleduration;在intCBSM_ClockCtrl::OnCreate(LPCREATESTRUCTlpCreateStruct)控件开始时计时,填写:begin=clock();得到开始时间。在执行方法voidCBSM_ClockCtrl::RunningTime()时,获得结束时间,并输出“结束—开始”的数值,在其下填写:CStringstr=_T("");end=clock();duration=double(end-begin)/CLOCKS_PER_SEC;str.Format(_T("%lf"),duration);AfxMessageBox(str);编译运行。添加BSM_Clock控件得到BSM_Clock控件的运行时间,以秒为单位。8.返回当前系统时间,时间相加,减功能对BSM_Clock控件特性进行设置,如图双击“显示现在时间”按钮,在voidCBSM_ClockPropPage::OnBSM_Button1()下填写函数:CTimetime=CTime::GetCurrentTime();CStringstr=time.Format("%Y年%m月%d日%H:%M:%S");AfxMessageBox(str);得到系统当前时间,以消息信息返回。创建编辑框,点击View->ClassWizard->MemberVariables>IDC_EDIT->如图,OK将输入变量放在BSM_time中。双击“日期之和”在voidCBSM_ClockPropPage::OnBSM_Add()下添加,将输入时间和现在时间相加的函数:this->UpdateData(1);intfirst=m_BSM_time.Find('-',0);//第一个数字与第二个数字间以“-”分割intsecond=m_BSM_time.Find('-',first+1);intyear=atoi(m_BSM_time.Left(4));intmonth=atoi(m_BSM_time.Mid(first+1,second-first+1));intday=atoi(m_BSM_time.Mid(second+1,m_BSM_time.GetLength()-second-1));CTimeendtime=CTime::GetCurrentTime();intdY=endtime.GetYear()+year;intdM=endtime.GetMonth()+month;intdD=endtime.GetDay()+day;CStringstr;str.Format("日期之和:%d年%d月%d日",dY,dM,dD);MessageBox(str);双击“日期之差”在vvoidCBSM_ClockPropPage::OnBSM_Sub()下添加,将输入时间和现在时间相加的函数:this->UpdateData(1);intfirst=m_BSM_time.Find('-',0);intsecond=m_BSM_time.Find('-',first+1);intyear=atoi(m_BSM_time.Left(4));intmonth=atoi(m_BSM_time.Mid(first+1,second-first+1));intday=atoi(m_BSM_time.Mid(second+1,m_BSM_time.GetLength()-second-1));CTimebegintime(year,month,day,0,0,0);CTimeendtime=CTime::GetCurrentTime();intdY=year-endtime.GetYear();intdM=month-endtime.GetMonth();intdD=day-endtime.GetDay();CStringstr;str.Format("距输入日期相差:%d年%d月%d日",dY,dM,dD);MessageBox(str);3.运行结果添加BSM_Clock控件->Edit->控件特性三.用VC编写一个客户端和服务器端,采用TCP具有系统维护功能:1.任意字符分割的解题思路即实现原理为:,首先确定采用TCP通信方式通信,采用完全C语言,先对TCP的socket服务器端进行创建编译,再对客户端。使服务器与客户端的连接,彼此接收传递数据,再通过进程列表的快照,调用分隔符函数等完成。2.函数代码及测试程序的设计:第一部分:完成服务器与客户端的连接1.首先确定采用TCP通信方式通信,采用完全C语言2.先对TCP的socket服务器端进行创建编译。新建Win32ConsoleApplication工程,命名为BSM_TCPSrv;再新建源文件BSM_TCPSrv,完成。3.编写服务器端程序#include//加载头文件#include//加载标准输入输出头文件voidmain(){WORDwVersionRequested;WSADATAwsaData;interr;intret;charszMessage[100];charrecvBuf[100];charsendBuf[100];wVersionRequested=MAKEWORD(1,1);//1.1版本的套接字err=WSAStartup(wVersionRequested,&wsaData);if(err!=0){return;}if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1){WSACleanup();//必须调用这个函数清除参数return;}//如果不是1.1的则退出以上为加载套接字库网络的必须函数======================================SOCKETsockSrv=socket(AF_INET,SOCK_STREAM,0);//创建套接字SOCKADDR_INaddrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//转换Unsignedshort为网络字节序的格式addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//将套接字绑定到一个本地地址和端口上listen(sockSrv,5);//将套接字设为监听模式,准备接收客户请求SOCKADDR_INaddrClient;//定义地址族intlen=sizeof(SOCKADDR);//初始化这个参数,这个参数必须被初始化//等待并接收数据SOCKETsockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);//accept的第三个参数一定要有初始值.//等待客户请求到来当请求到来后,接受连接请求,返回一个亲的对应于此连接的套接字sprintf(sendBuf,"Welcome%stoBsm`STcpSrv",inet_ntoa(addrClient.sin_addr));//用返回的套接字和客户端进行通信send(sockConn,sendBuf,strlen(sendBuf)+1,0);while(1){ret=recv(sockConn,szMessage,100,0);szMessage[ret]='\0';printf("Received[%dbytes]:'%s'\n",ret,szMessage);closesocket(sockConn);//关闭套接字.等待另一个用户请求}}说明:首先运行服务器端程序等待客户端的命令,当连接成功后显示4.对TCP的socket客户端端进行创建编译。在原有工程中新建Win32ConsoleApplication工程,命名为BSM_TCPClient;再新建源文件BSM_TCPClient,完成。5.编写客户端程序#include#includevoidmain
printf("|%s|\n",dest[i]);
split(dest[i],"",dest2,&num2);
for(j=0;j{printf("|%s|\n",dest2[j]);}}return0;}3.分割字符串函数以动态链接库DLL形式进行导出,以一个基于对话框的程序进行测试1.新建Win32Dynamic-LinkLabrary,名称split3建立一个简单的工程,其余默认,完成。2.添加函数在头文件StdAfx.h添加输出导数声明#defineEXPORT__declspec(dllexport)extern"C"EXPORTvoid__stdcallsplit(char*src,constchar*separator,char**dest,int*num);3.在源文件SourceFiles中添加典型的输出模块定义split3.defLIBRARYdh.dllEXPORTSsplit=split 4.在源文件SourceFiles中添加分割函数void__stdcallsplit(char*src,constchar*separator,char**dest,int*num){char*pNext;intcount=0;if(src==NULL||strlen(src)==0)return;if(separator==NULL||strlen(separator)==0)return;pNext=strtok(src,separator);while(pNext!=NULL){*dest++=pNext;++count;pNext=strtok(NULL,separator);}*num=count;}5.点击F7编译生成连接调用DLL所需的实际代码文件split3.dll和导入库文件split3.lib6..点击MicrosoftVisualC++6.0,新建MFCAppWizard(exe),工程名称split4,选择基本对话框,完成。创建对话框。7.点击查看,建立类导向,将IDC_EDIT1和IDC_EDIT2分别添加成员变量,并命名为m_edit1和m_edit2,OK。8.在声明区添加指针声明typedefint(_stdcall*funspliter)(char*src,constchar*separator,char**dest,int*num); 9.在voidCSplit4Dlg::OnButton1()中添加完整的加载DLL,调用DLL中的导出函数,显示在对话框,卸载DLL的函数,之后编译。HMODULEhMod=LoadLibrary("split3.dll");if(hMod!=NULL){funsplitershowspliter;showspliter=(funspliter)GetProcAddress(hMod,"split");if(showspliter){charsrc[100];//="tttttttttttt*uuuuuuuuuuuuuu"/*(char*)m_edit1.GetBuffer(0)*/;UpdateData(TRUE);intstrLength1=m_edit1.GetLength()+1;//charchArray[100];memset(src,0,sizeof(bool)*100);//将数组的垃圾内容清空.strncpy(src,m_edit1,strLength1);char*dest[128];char*dest2[128];intnum=0,num2=0;inti,j;charddd[100];UpdateData(TRUE);intstrLength2=m_edit2.GetLength()+1;memset(ddd,0,sizeof(bool)*100);strncpy(ddd,m_edit2,strLength2);showspliter(src,ddd,dest,&num);for(i=0;i{//printf("|%s|\n",dest[i]);AfxMessageBox(dest[i]);/*showspliter(dest[i],"\t\n",dest2,&num2);for(j=0;j{//printf("|%s|\n",dest2[j]);AfxMessageBox(dest2[j]);}*/}}}FreeLibrary(hMod);}10.将split3中的实际代码文件split3.dll和导入库文件split3.lib,复制到split4的根目录。4.运行结果分割情况:二.用VC编写一个时钟的ActiveX控件1.时钟的ActiveX控件的解题思路即实现原理为新建MFCAppWizard(exe)工程,自动生成一个简单对话框,其中应包含字符串输入框,分隔符输入框,分割后字符串输出框,确认按钮。相应的函数应在确认按钮的响应函数中被调用。通过#pragmacomment(lib,"dd.lib")告诉执行文件动态链接库路径。并声明所以调用的函数。2.函数代码及测试程序的设计1.建立新的MFCActiveXControlWizard工程,默认完成。2.编译后对Debug文件中生成的Bsm_Clock.ocx控件进行注册,点击运行后输入regsvr32/uC:\Users\lenovo\Desktop\C++练习\BSM_Clock\Debug\BSM_Clock.ocx注册成功(WIN7操作系统需要在安全模式下注册)3.运行4.选择ActiveXControlTextContainer后确定,出现测试模板后选择Edit->Insertnewcontrol5.在OnDraw中填写输出系统当前时间(年月日时分秒)的函数voidCBsm_ClockCtrl::OnDraw(CDC*pdc,constCRect&rcBounds,constCRect&rcInvalid){//TODO:Replacethefollowingcodewithyourowndrawingcode.pdc->FillRect(rcBounds,CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));//pdc->Ellipse(rcBounds);CTimetime=CTime::GetCurrentTime();CStringstr=time.Format("%Y年%m月%d日%H:%M:%S");pdc->TextOut(0,0,str);}设置动态时间,对定时器进行设置,右键点击CBsm_ClockCtrl选择AddWindowsMseeageHandler->分别选择WM_CREATE和WM_TIMER->AddHandler在OnCreate下填写SetTimer(1,1000,NULL);对时间每秒更新一次,在OnTimer下填写InvalidateControl();重绘整个窗口,完成对动态实时时钟的设置。6.每分钟产生一个分钟事件,每小时产生一个小时事件点击View->ClassWizard->ActiveXEvents,建立Stock标准事件,Bsm_NewMinute,Bsm_NewHour在OnDraw中CTimetime=CTime::GetCurrentTime();下添加if((0==time.GetSecond())&&(0!=time.GetMinute())){FireBsm_NewMinute();}if((0==time.GetSecond())&&(0==time.GetMinute())){FireBsm_NewHour();}产生一个分钟事件产生一个小时事件7.返回空间创建到现在的时间为BSM_Clock控件添加一个自定义的方法,用来显示控件运行时间。点击View->ClassWizard->Automation->AddMethod->如图,OK在BSM_ClockCtl.h头文件中添加定义:#include//time_tbegin,end;doubleduration;在intCBSM_ClockCtrl::OnCreate(LPCREATESTRUCTlpCreateStruct)控件开始时计时,填写:begin=clock();得到开始时间。在执行方法voidCBSM_ClockCtrl::RunningTime()时,获得结束时间,并输出“结束—开始”的数值,在其下填写:CStringstr=_T("");end=clock();duration=double(end-begin)/CLOCKS_PER_SEC;str.Format(_T("%lf"),duration);AfxMessageBox(str);编译运行。添加BSM_Clock控件得到BSM_Clock控件的运行时间,以秒为单位。8.返回当前系统时间,时间相加,减功能对BSM_Clock控件特性进行设置,如图双击“显示现在时间”按钮,在voidCBSM_ClockPropPage::OnBSM_Button1()下填写函数:CTimetime=CTime::GetCurrentTime();CStringstr=time.Format("%Y年%m月%d日%H:%M:%S");AfxMessageBox(str);得到系统当前时间,以消息信息返回。创建编辑框,点击View->ClassWizard->MemberVariables>IDC_EDIT->如图,OK将输入变量放在BSM_time中。双击“日期之和”在voidCBSM_ClockPropPage::OnBSM_Add()下添加,将输入时间和现在时间相加的函数:this->UpdateData(1);intfirst=m_BSM_time.Find('-',0);//第一个数字与第二个数字间以“-”分割intsecond=m_BSM_time.Find('-',first+1);intyear=atoi(m_BSM_time.Left(4));intmonth=atoi(m_BSM_time.Mid(first+1,second-first+1));intday=atoi(m_BSM_time.Mid(second+1,m_BSM_time.GetLength()-second-1));CTimeendtime=CTime::GetCurrentTime();intdY=endtime.GetYear()+year;intdM=endtime.GetMonth()+month;intdD=endtime.GetDay()+day;CStringstr;str.Format("日期之和:%d年%d月%d日",dY,dM,dD);MessageBox(str);双击“日期之差”在vvoidCBSM_ClockPropPage::OnBSM_Sub()下添加,将输入时间和现在时间相加的函数:this->UpdateData(1);intfirst=m_BSM_time.Find('-',0);intsecond=m_BSM_time.Find('-',first+1);intyear=atoi(m_BSM_time.Left(4));intmonth=atoi(m_BSM_time.Mid(first+1,second-first+1));intday=atoi(m_BSM_time.Mid(second+1,m_BSM_time.GetLength()-second-1));CTimebegintime(year,month,day,0,0,0);CTimeendtime=CTime::GetCurrentTime();intdY=year-endtime.GetYear();intdM=month-endtime.GetMonth();intdD=day-endtime.GetDay();CStringstr;str.Format("距输入日期相差:%d年%d月%d日",dY,dM,dD);MessageBox(str);3.运行结果添加BSM_Clock控件->Edit->控件特性三.用VC编写一个客户端和服务器端,采用TCP具有系统维护功能:1.任意字符分割的解题思路即实现原理为:,首先确定采用TCP通信方式通信,采用完全C语言,先对TCP的socket服务器端进行创建编译,再对客户端。使服务器与客户端的连接,彼此接收传递数据,再通过进程列表的快照,调用分隔符函数等完成。2.函数代码及测试程序的设计:第一部分:完成服务器与客户端的连接1.首先确定采用TCP通信方式通信,采用完全C语言2.先对TCP的socket服务器端进行创建编译。新建Win32ConsoleApplication工程,命名为BSM_TCPSrv;再新建源文件BSM_TCPSrv,完成。3.编写服务器端程序#include//加载头文件#include//加载标准输入输出头文件voidmain(){WORDwVersionRequested;WSADATAwsaData;interr;intret;charszMessage[100];charrecvBuf[100];charsendBuf[100];wVersionRequested=MAKEWORD(1,1);//1.1版本的套接字err=WSAStartup(wVersionRequested,&wsaData);if(err!=0){return;}if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1){WSACleanup();//必须调用这个函数清除参数return;}//如果不是1.1的则退出以上为加载套接字库网络的必须函数======================================SOCKETsockSrv=socket(AF_INET,SOCK_STREAM,0);//创建套接字SOCKADDR_INaddrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//转换Unsignedshort为网络字节序的格式addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//将套接字绑定到一个本地地址和端口上listen(sockSrv,5);//将套接字设为监听模式,准备接收客户请求SOCKADDR_INaddrClient;//定义地址族intlen=sizeof(SOCKADDR);//初始化这个参数,这个参数必须被初始化//等待并接收数据SOCKETsockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);//accept的第三个参数一定要有初始值.//等待客户请求到来当请求到来后,接受连接请求,返回一个亲的对应于此连接的套接字sprintf(sendBuf,"Welcome%stoBsm`STcpSrv",inet_ntoa(addrClient.sin_addr));//用返回的套接字和客户端进行通信send(sockConn,sendBuf,strlen(sendBuf)+1,0);while(1){ret=recv(sockConn,szMessage,100,0);szMessage[ret]='\0';printf("Received[%dbytes]:'%s'\n",ret,szMessage);closesocket(sockConn);//关闭套接字.等待另一个用户请求}}说明:首先运行服务器端程序等待客户端的命令,当连接成功后显示4.对TCP的socket客户端端进行创建编译。在原有工程中新建Win32ConsoleApplication工程,命名为BSM_TCPClient;再新建源文件BSM_TCPClient,完成。5.编写客户端程序#include#includevoidmain
printf("|%s|\n",dest2[j]);
return0;
3.分割字符串函数以动态链接库DLL形式进行导出,以一个基于对话框的程序进行测试
1.新建Win32Dynamic-LinkLabrary,名称split3
建立一个简单的工程,其余默认,完成。
2.添加函数
在头文件StdAfx.h添加输出导数声明
#defineEXPORT__declspec(dllexport)
extern"C"EXPORTvoid__stdcallsplit(char*src,constchar*separator,char**dest,int*num)
;
3.在源文件SourceFiles中添加典型的输出模块定义split3.def
LIBRARYdh.dll
EXPORTS
split=split
4.在源文件SourceFiles中添加分割函数
void__stdcallsplit(char*src,constchar*separator,char**dest,int*num)
char*pNext;
if(separator==NULL||strlen(separator)==0)return;
pNext=strtok(src,separator);
while(pNext!
*dest++=pNext;
pNext=strtok(NULL,separator);
5.点击F7编译
生成连接调用DLL所需的实际代码文件split3.dll和导入库文件split3.lib
6..点击MicrosoftVisualC++6.0,新建MFCAppWizard(exe),工程名称split4,选择基本对话框,完成。
创建对话框。
7.点击查看,建立类导向,将IDC_EDIT1和IDC_EDIT2分别添加成员变量,并命名为m_edit1和m_edit2,OK。
8.在声明区添加指针声明
typedefint(_stdcall*funspliter)(char*src,constchar*separator,char**dest,int*num);
9.在voidCSplit4Dlg:
:
OnButton1()中添加完整的加载DLL,调用DLL中的导出函数,显示在对话框,卸载DLL的函数,之后编译。
HMODULEhMod=LoadLibrary("split3.dll");
if(hMod!
funsplitershowspliter;
showspliter=(funspliter)GetProcAddress(hMod,"split");
if(showspliter)
charsrc[100];
//="tttttttttttt*uuuuuuuuuuuuuu"/*(char*)m_edit1.GetBuffer(0)*/;
UpdateData(TRUE);
intstrLength1=m_edit1.GetLength()+1;
//charchArray[100];
memset(src,0,sizeof(bool)*100);//将数组的垃圾内容清空.
strncpy(src,m_edit1,strLength1);
charddd[100];
intstrLength2=m_edit2.GetLength()+1;
memset(ddd,0,sizeof(bool)*100);
strncpy(ddd,m_edit2,strLength2);
showspliter(src,ddd,dest,&num);
for(i=0;i{//printf("|%s|\n",dest[i]);AfxMessageBox(dest[i]);/*showspliter(dest[i],"\t\n",dest2,&num2);for(j=0;j{//printf("|%s|\n",dest2[j]);AfxMessageBox(dest2[j]);}*/}}}FreeLibrary(hMod);}10.将split3中的实际代码文件split3.dll和导入库文件split3.lib,复制到split4的根目录。4.运行结果分割情况:二.用VC编写一个时钟的ActiveX控件1.时钟的ActiveX控件的解题思路即实现原理为新建MFCAppWizard(exe)工程,自动生成一个简单对话框,其中应包含字符串输入框,分隔符输入框,分割后字符串输出框,确认按钮。相应的函数应在确认按钮的响应函数中被调用。通过#pragmacomment(lib,"dd.lib")告诉执行文件动态链接库路径。并声明所以调用的函数。2.函数代码及测试程序的设计1.建立新的MFCActiveXControlWizard工程,默认完成。2.编译后对Debug文件中生成的Bsm_Clock.ocx控件进行注册,点击运行后输入regsvr32/uC:\Users\lenovo\Desktop\C++练习\BSM_Clock\Debug\BSM_Clock.ocx注册成功(WIN7操作系统需要在安全模式下注册)3.运行4.选择ActiveXControlTextContainer后确定,出现测试模板后选择Edit->Insertnewcontrol5.在OnDraw中填写输出系统当前时间(年月日时分秒)的函数voidCBsm_ClockCtrl::OnDraw(CDC*pdc,constCRect&rcBounds,constCRect&rcInvalid){//TODO:Replacethefollowingcodewithyourowndrawingcode.pdc->FillRect(rcBounds,CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));//pdc->Ellipse(rcBounds);CTimetime=CTime::GetCurrentTime();CStringstr=time.Format("%Y年%m月%d日%H:%M:%S");pdc->TextOut(0,0,str);}设置动态时间,对定时器进行设置,右键点击CBsm_ClockCtrl选择AddWindowsMseeageHandler->分别选择WM_CREATE和WM_TIMER->AddHandler在OnCreate下填写SetTimer(1,1000,NULL);对时间每秒更新一次,在OnTimer下填写InvalidateControl();重绘整个窗口,完成对动态实时时钟的设置。6.每分钟产生一个分钟事件,每小时产生一个小时事件点击View->ClassWizard->ActiveXEvents,建立Stock标准事件,Bsm_NewMinute,Bsm_NewHour在OnDraw中CTimetime=CTime::GetCurrentTime();下添加if((0==time.GetSecond())&&(0!=time.GetMinute())){FireBsm_NewMinute();}if((0==time.GetSecond())&&(0==time.GetMinute())){FireBsm_NewHour();}产生一个分钟事件产生一个小时事件7.返回空间创建到现在的时间为BSM_Clock控件添加一个自定义的方法,用来显示控件运行时间。点击View->ClassWizard->Automation->AddMethod->如图,OK在BSM_ClockCtl.h头文件中添加定义:#include//time_tbegin,end;doubleduration;在intCBSM_ClockCtrl::OnCreate(LPCREATESTRUCTlpCreateStruct)控件开始时计时,填写:begin=clock();得到开始时间。在执行方法voidCBSM_ClockCtrl::RunningTime()时,获得结束时间,并输出“结束—开始”的数值,在其下填写:CStringstr=_T("");end=clock();duration=double(end-begin)/CLOCKS_PER_SEC;str.Format(_T("%lf"),duration);AfxMessageBox(str);编译运行。添加BSM_Clock控件得到BSM_Clock控件的运行时间,以秒为单位。8.返回当前系统时间,时间相加,减功能对BSM_Clock控件特性进行设置,如图双击“显示现在时间”按钮,在voidCBSM_ClockPropPage::OnBSM_Button1()下填写函数:CTimetime=CTime::GetCurrentTime();CStringstr=time.Format("%Y年%m月%d日%H:%M:%S");AfxMessageBox(str);得到系统当前时间,以消息信息返回。创建编辑框,点击View->ClassWizard->MemberVariables>IDC_EDIT->如图,OK将输入变量放在BSM_time中。双击“日期之和”在voidCBSM_ClockPropPage::OnBSM_Add()下添加,将输入时间和现在时间相加的函数:this->UpdateData(1);intfirst=m_BSM_time.Find('-',0);//第一个数字与第二个数字间以“-”分割intsecond=m_BSM_time.Find('-',first+1);intyear=atoi(m_BSM_time.Left(4));intmonth=atoi(m_BSM_time.Mid(first+1,second-first+1));intday=atoi(m_BSM_time.Mid(second+1,m_BSM_time.GetLength()-second-1));CTimeendtime=CTime::GetCurrentTime();intdY=endtime.GetYear()+year;intdM=endtime.GetMonth()+month;intdD=endtime.GetDay()+day;CStringstr;str.Format("日期之和:%d年%d月%d日",dY,dM,dD);MessageBox(str);双击“日期之差”在vvoidCBSM_ClockPropPage::OnBSM_Sub()下添加,将输入时间和现在时间相加的函数:this->UpdateData(1);intfirst=m_BSM_time.Find('-',0);intsecond=m_BSM_time.Find('-',first+1);intyear=atoi(m_BSM_time.Left(4));intmonth=atoi(m_BSM_time.Mid(first+1,second-first+1));intday=atoi(m_BSM_time.Mid(second+1,m_BSM_time.GetLength()-second-1));CTimebegintime(year,month,day,0,0,0);CTimeendtime=CTime::GetCurrentTime();intdY=year-endtime.GetYear();intdM=month-endtime.GetMonth();intdD=day-endtime.GetDay();CStringstr;str.Format("距输入日期相差:%d年%d月%d日",dY,dM,dD);MessageBox(str);3.运行结果添加BSM_Clock控件->Edit->控件特性三.用VC编写一个客户端和服务器端,采用TCP具有系统维护功能:1.任意字符分割的解题思路即实现原理为:,首先确定采用TCP通信方式通信,采用完全C语言,先对TCP的socket服务器端进行创建编译,再对客户端。使服务器与客户端的连接,彼此接收传递数据,再通过进程列表的快照,调用分隔符函数等完成。2.函数代码及测试程序的设计:第一部分:完成服务器与客户端的连接1.首先确定采用TCP通信方式通信,采用完全C语言2.先对TCP的socket服务器端进行创建编译。新建Win32ConsoleApplication工程,命名为BSM_TCPSrv;再新建源文件BSM_TCPSrv,完成。3.编写服务器端程序#include//加载头文件#include//加载标准输入输出头文件voidmain(){WORDwVersionRequested;WSADATAwsaData;interr;intret;charszMessage[100];charrecvBuf[100];charsendBuf[100];wVersionRequested=MAKEWORD(1,1);//1.1版本的套接字err=WSAStartup(wVersionRequested,&wsaData);if(err!=0){return;}if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1){WSACleanup();//必须调用这个函数清除参数return;}//如果不是1.1的则退出以上为加载套接字库网络的必须函数======================================SOCKETsockSrv=socket(AF_INET,SOCK_STREAM,0);//创建套接字SOCKADDR_INaddrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//转换Unsignedshort为网络字节序的格式addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//将套接字绑定到一个本地地址和端口上listen(sockSrv,5);//将套接字设为监听模式,准备接收客户请求SOCKADDR_INaddrClient;//定义地址族intlen=sizeof(SOCKADDR);//初始化这个参数,这个参数必须被初始化//等待并接收数据SOCKETsockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);//accept的第三个参数一定要有初始值.//等待客户请求到来当请求到来后,接受连接请求,返回一个亲的对应于此连接的套接字sprintf(sendBuf,"Welcome%stoBsm`STcpSrv",inet_ntoa(addrClient.sin_addr));//用返回的套接字和客户端进行通信send(sockConn,sendBuf,strlen(sendBuf)+1,0);while(1){ret=recv(sockConn,szMessage,100,0);szMessage[ret]='\0';printf("Received[%dbytes]:'%s'\n",ret,szMessage);closesocket(sockConn);//关闭套接字.等待另一个用户请求}}说明:首先运行服务器端程序等待客户端的命令,当连接成功后显示4.对TCP的socket客户端端进行创建编译。在原有工程中新建Win32ConsoleApplication工程,命名为BSM_TCPClient;再新建源文件BSM_TCPClient,完成。5.编写客户端程序#include#includevoidmain
//printf("|%s|\n",dest[i]);
AfxMessageBox(dest[i]);
/*
showspliter(dest[i],"\t\n",dest2,&num2);
for(j=0;j{//printf("|%s|\n",dest2[j]);AfxMessageBox(dest2[j]);}*/}}}FreeLibrary(hMod);}10.将split3中的实际代码文件split3.dll和导入库文件split3.lib,复制到split4的根目录。4.运行结果分割情况:二.用VC编写一个时钟的ActiveX控件1.时钟的ActiveX控件的解题思路即实现原理为新建MFCAppWizard(exe)工程,自动生成一个简单对话框,其中应包含字符串输入框,分隔符输入框,分割后字符串输出框,确认按钮。相应的函数应在确认按钮的响应函数中被调用。通过#pragmacomment(lib,"dd.lib")告诉执行文件动态链接库路径。并声明所以调用的函数。2.函数代码及测试程序的设计1.建立新的MFCActiveXControlWizard工程,默认完成。2.编译后对Debug文件中生成的Bsm_Clock.ocx控件进行注册,点击运行后输入regsvr32/uC:\Users\lenovo\Desktop\C++练习\BSM_Clock\Debug\BSM_Clock.ocx注册成功(WIN7操作系统需要在安全模式下注册)3.运行4.选择ActiveXControlTextContainer后确定,出现测试模板后选择Edit->Insertnewcontrol5.在OnDraw中填写输出系统当前时间(年月日时分秒)的函数voidCBsm_ClockCtrl::OnDraw(CDC*pdc,constCRect&rcBounds,constCRect&rcInvalid){//TODO:Replacethefollowingcodewithyourowndrawingcode.pdc->FillRect(rcBounds,CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));//pdc->Ellipse(rcBounds);CTimetime=CTime::GetCurrentTime();CStringstr=time.Format("%Y年%m月%d日%H:%M:%S");pdc->TextOut(0,0,str);}设置动态时间,对定时器进行设置,右键点击CBsm_ClockCtrl选择AddWindowsMseeageHandler->分别选择WM_CREATE和WM_TIMER->AddHandler在OnCreate下填写SetTimer(1,1000,NULL);对时间每秒更新一次,在OnTimer下填写InvalidateControl();重绘整个窗口,完成对动态实时时钟的设置。6.每分钟产生一个分钟事件,每小时产生一个小时事件点击View->ClassWizard->ActiveXEvents,建立Stock标准事件,Bsm_NewMinute,Bsm_NewHour在OnDraw中CTimetime=CTime::GetCurrentTime();下添加if((0==time.GetSecond())&&(0!=time.GetMinute())){FireBsm_NewMinute();}if((0==time.GetSecond())&&(0==time.GetMinute())){FireBsm_NewHour();}产生一个分钟事件产生一个小时事件7.返回空间创建到现在的时间为BSM_Clock控件添加一个自定义的方法,用来显示控件运行时间。点击View->ClassWizard->Automation->AddMethod->如图,OK在BSM_ClockCtl.h头文件中添加定义:#include//time_tbegin,end;doubleduration;在intCBSM_ClockCtrl::OnCreate(LPCREATESTRUCTlpCreateStruct)控件开始时计时,填写:begin=clock();得到开始时间。在执行方法voidCBSM_ClockCtrl::RunningTime()时,获得结束时间,并输出“结束—开始”的数值,在其下填写:CStringstr=_T("");end=clock();duration=double(end-begin)/CLOCKS_PER_SEC;str.Format(_T("%lf"),duration);AfxMessageBox(str);编译运行。添加BSM_Clock控件得到BSM_Clock控件的运行时间,以秒为单位。8.返回当前系统时间,时间相加,减功能对BSM_Clock控件特性进行设置,如图双击“显示现在时间”按钮,在voidCBSM_ClockPropPage::OnBSM_Button1()下填写函数:CTimetime=CTime::GetCurrentTime();CStringstr=time.Format("%Y年%m月%d日%H:%M:%S");AfxMessageBox(str);得到系统当前时间,以消息信息返回。创建编辑框,点击View->ClassWizard->MemberVariables>IDC_EDIT->如图,OK将输入变量放在BSM_time中。双击“日期之和”在voidCBSM_ClockPropPage::OnBSM_Add()下添加,将输入时间和现在时间相加的函数:this->UpdateData(1);intfirst=m_BSM_time.Find('-',0);//第一个数字与第二个数字间以“-”分割intsecond=m_BSM_time.Find('-',first+1);intyear=atoi(m_BSM_time.Left(4));intmonth=atoi(m_BSM_time.Mid(first+1,second-first+1));intday=atoi(m_BSM_time.Mid(second+1,m_BSM_time.GetLength()-second-1));CTimeendtime=CTime::GetCurrentTime();intdY=endtime.GetYear()+year;intdM=endtime.GetMonth()+month;intdD=endtime.GetDay()+day;CStringstr;str.Format("日期之和:%d年%d月%d日",dY,dM,dD);MessageBox(str);双击“日期之差”在vvoidCBSM_ClockPropPage::OnBSM_Sub()下添加,将输入时间和现在时间相加的函数:this->UpdateData(1);intfirst=m_BSM_time.Find('-',0);intsecond=m_BSM_time.Find('-',first+1);intyear=atoi(m_BSM_time.Left(4));intmonth=atoi(m_BSM_time.Mid(first+1,second-first+1));intday=atoi(m_BSM_time.Mid(second+1,m_BSM_time.GetLength()-second-1));CTimebegintime(year,month,day,0,0,0);CTimeendtime=CTime::GetCurrentTime();intdY=year-endtime.GetYear();intdM=month-endtime.GetMonth();intdD=day-endtime.GetDay();CStringstr;str.Format("距输入日期相差:%d年%d月%d日",dY,dM,dD);MessageBox(str);3.运行结果添加BSM_Clock控件->Edit->控件特性三.用VC编写一个客户端和服务器端,采用TCP具有系统维护功能:1.任意字符分割的解题思路即实现原理为:,首先确定采用TCP通信方式通信,采用完全C语言,先对TCP的socket服务器端进行创建编译,再对客户端。使服务器与客户端的连接,彼此接收传递数据,再通过进程列表的快照,调用分隔符函数等完成。2.函数代码及测试程序的设计:第一部分:完成服务器与客户端的连接1.首先确定采用TCP通信方式通信,采用完全C语言2.先对TCP的socket服务器端进行创建编译。新建Win32ConsoleApplication工程,命名为BSM_TCPSrv;再新建源文件BSM_TCPSrv,完成。3.编写服务器端程序#include//加载头文件#include//加载标准输入输出头文件voidmain(){WORDwVersionRequested;WSADATAwsaData;interr;intret;charszMessage[100];charrecvBuf[100];charsendBuf[100];wVersionRequested=MAKEWORD(1,1);//1.1版本的套接字err=WSAStartup(wVersionRequested,&wsaData);if(err!=0){return;}if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1){WSACleanup();//必须调用这个函数清除参数return;}//如果不是1.1的则退出以上为加载套接字库网络的必须函数======================================SOCKETsockSrv=socket(AF_INET,SOCK_STREAM,0);//创建套接字SOCKADDR_INaddrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//转换Unsignedshort为网络字节序的格式addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//将套接字绑定到一个本地地址和端口上listen(sockSrv,5);//将套接字设为监听模式,准备接收客户请求SOCKADDR_INaddrClient;//定义地址族intlen=sizeof(SOCKADDR);//初始化这个参数,这个参数必须被初始化//等待并接收数据SOCKETsockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);//accept的第三个参数一定要有初始值.//等待客户请求到来当请求到来后,接受连接请求,返回一个亲的对应于此连接的套接字sprintf(sendBuf,"Welcome%stoBsm`STcpSrv",inet_ntoa(addrClient.sin_addr));//用返回的套接字和客户端进行通信send(sockConn,sendBuf,strlen(sendBuf)+1,0);while(1){ret=recv(sockConn,szMessage,100,0);szMessage[ret]='\0';printf("Received[%dbytes]:'%s'\n",ret,szMessage);closesocket(sockConn);//关闭套接字.等待另一个用户请求}}说明:首先运行服务器端程序等待客户端的命令,当连接成功后显示4.对TCP的socket客户端端进行创建编译。在原有工程中新建Win32ConsoleApplication工程,命名为BSM_TCPClient;再新建源文件BSM_TCPClient,完成。5.编写客户端程序#include#includevoidmain
//printf("|%s|\n",dest2[j]);
AfxMessageBox(dest2[j]);
}*/
FreeLibrary(hMod);
10.将split3中的实际代码文件split3.dll和导入库文件split3.lib,复制到split4的根目录。
4.运行结果
分割情况:
二.用VC编写一个时钟的ActiveX控件
1.时钟的ActiveX控件的解题思路即实现原理为
新建MFCAppWizard(exe)工程,自动生成一个简单对话框,其中应包含字符串输入框,分隔符输入框,分割后字符串输出框,确认按钮。
相应的函数应在确认按钮的响应函数中被调用。
通过#pragmacomment(lib,"dd.lib")告诉执行文件动态链接库路径。
并声明所以调用的函数。
2.函数代码及测试程序的设计
1.建立新的MFCActiveXControlWizard工程,默认完成。
2.编译后对Debug文件中生成的Bsm_Clock.ocx控件进行注册,点击运行后输入regsvr32/uC:
\Users\lenovo\Desktop\C++练习\BSM_Clock\Debug\BSM_Clock.ocx注册成功(WIN7操作系统需要在安全模式下注册)
3.运行
4.选择ActiveXControlTextContainer后确定,出现测试模板后选择Edit->Insertnewcontrol
5.在OnDraw中填写输出系统当前时间(年月日时分秒)的函数
voidCBsm_ClockCtrl:
OnDraw(CDC*pdc,constCRect&rcBounds,constCRect&rcInvalid)
//TODO:
Replacethefollowingcodewithyourowndrawingcode.
pdc->FillRect(rcBounds,CBrush:
FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
//pdc->Ellipse(rcBounds);
CTimetime=CTime:
GetCurrentTime();
CStringstr=time.Format("%Y年%m月%d日%H:
%M:
%S");
pdc->TextOut(0,0,str);
设置动态时间,对定时器进行设置,右键点击CBsm_ClockCtrl选择AddWindowsMseeageHandler->分别选择WM_CREATE和WM_TIMER->AddHandler
在OnCreate下填写SetTimer(1,1000,NULL);对时间每秒更新一次,在OnTimer下填写InvalidateControl();重绘整个窗口,完成对动态实时时钟的设置。
6.每分钟产生一个分钟事件,每小时产生一个小时事件
点击View->ClassWizard->ActiveXEvents,建立Stock标准事件,Bsm_NewMinute,Bsm_NewHour
在OnDraw中CTimetime=CTime:
GetCurrentTime();下添加
if((0==time.GetSecond())&&(0!
=time.GetMinute()))
FireBsm_NewMinute();
if((0==time.GetSecond())&&(0==time.GetMinute()))
FireBsm_NewHour();
产生一个分钟事件
产生一个小时事件
7.返回空间创建到现在的时间
为BSM_Clock控件添加一个自定义的方法,用来显示控件运行时间。
点击View->ClassWizard->Automation->AddMethod->如图,OK
在BSM_ClockCtl.h头文件中添加定义:
#include//
time_tbegin,end;
doubleduration;
在intCBSM_ClockCtrl:
OnCreate(LPCREATESTRUCTlpCreateStruct)控件开始时计时,填写:
begin=clock();得到开始时间。
在执行方法voidCBSM_ClockCtrl:
RunningTime()时,获得结束时间,并输出“结束—开始”的数值,在其下填写:
CStringstr=_T("");
end=clock();
duration=double(end-begin)/CLOCKS_PER_SEC;
str.Format(_T("%lf"),duration);
AfxMessageBox(str);
编译运行。
添加BSM_Clock控件
得到BSM_Clock控件的运行时间,以秒为单位。
8.返回当前系统时间,时间相加,减功能
对BSM_Clock控件特性进行设置,如图
双击“显示现在时间”按钮,在voidCBSM_ClockPropPage:
OnBSM_Button1()下填写函数:
得到系统当前时间,以消息信息返回。
创建编辑框,点击View->ClassWizard->MemberVariables>IDC_EDIT->如图,OK
将输入变量放在BSM_time中。
双击“日期之和”在voidCBSM_ClockPropPage:
OnBSM_Add()下添加,将输入时间和现在时间相加的函数:
this->UpdateData
(1);
intfirst=m_BSM_time.Find('-',0);//第一个数字与第二个数字间以“-”分割
intsecond=m_BSM_time.Find('-',first+1);
intyear=atoi(m_BSM_time.Left(4));
intmonth=atoi(m_BSM_time.Mid(first+1,second-first+1));
intday=atoi(m_BSM_time.Mid(second+1,m_BSM_time.GetLength()-second-1));
CTimeendtime=CTime:
intdY=endtime.GetYear()+year;
intdM=endtime.GetMonth()+month;
intdD=endtime.GetDay()+day;
CStringstr;
str.Format("日期之和:
%d年%d月%d日",dY,dM,dD);
MessageBox(str);
双击“日期之差”在vvoidCBSM_ClockPropPage:
OnBSM_Sub()下添加,将输入时间和现在时间相加的函数:
intfirst=m_BSM_time.Find('-',0);
CTimebegintime(year,month,day,0,0,0);
intdY=year-endtime.GetYear();
intdM=month-endtime.GetMonth();
intdD=day-endtime.GetDay();
str.Format("距输入日期相差:
3.运行结果
添加BSM_Clock控件->Edit->控件特性
三.用VC编写一个客户端和服务器端,采用TCP具有系统维护功能:
,首先确定采用TCP通信方式通信,采用完全C语言,先对TCP的socket服务器端进行创建编译,再对客户端。
使服务器与客户端的连接,彼此接收传递数据,再通过进程列表的快照,调用分隔符函数等完成。
2.函数代码及测试程序的设计:
第一部分:
完成服务器与客户端的连接
1.首先确定采用TCP通信方式通信,采用完全C语言
2.先对TCP的socket服务器端进行创建编译。
新建Win32ConsoleApplication工程,命名为BSM_TCPSrv;
再新建源文件BSM_TCPSrv,完成。
3.编写服务器端程序
#include//加载头文件
#include//加载标准输入输出头文件
voidmain()
WORDwVersionRequested;
WSADATAwsaData;
interr;
intret;
charszMessage[100];
charrecvBuf[100];
charsendBuf[100];
wVersionRequested=MAKEWORD(1,1);//1.1版本的套接字
err=WSAStartup(wVersionRequested,&wsaData);
if(err!
=0)
return;
if(LOBYTE(wsaData.wVersion)!
=1||HIBYTE(wsaData.wVersion)!
=1)
WSACleanup();//必须调用这个函数清除参数
}//如果不是1.1的则退出
以上为加载套接字库网络的必须函数
======================================
SOCKETsockSrv=socket(AF_INET,SOCK_STREAM,0);//创建套接字
SOCKADDR_INaddrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
//转换Unsignedshort为网络字节序的格式
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//将套接字绑定到一个本地地址和端口上
listen(sockSrv,5);//将套接字设为监听模式,准备接收客户请求
SOCKADDR_INaddrClient;//定义地址族
intlen=sizeof(SOCKADDR);//初始化这个参数,这个参数必须被初始化
//等待并接收数据
SOCKETsockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
//accept的第三个参数一定要有初始值.//等待客户请求到来当请求到来后,接受连接请求,返回一个亲的对应于此连接的套接字
sprintf(sendBuf,"Welcome%stoBsm`STcpSrv",inet_ntoa(addrClient.sin_addr));
//用返回的套接字和客户端进行通信
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
ret=recv(sockConn,szMessage,100,0);
szMessage[ret]='\0';
printf("Received[%dbytes]:
'%s'\n",ret,szMessage);
closesocket(sockConn);//关闭套接字.等待另一个用户请求
说明:
首先运行服务器端程序等待客户端的命令,当连接成功后显示
4.对TCP的socket客户端端进行创建编译。
在原有工程中新建Win32ConsoleApplication工程,命名为BSM_TCPClient;
再新建源文件BSM_TCPClient,完成。
5.编写客户端程序
voidmain
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2