版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
=====================voidMYSOC含换行符号,即只能输入一行信息。用户在接受数据的时候,不能判O”G只有在初始化对话框时才被调用,由于局部变量默认是自动变DVALUE40001#defineAPSNEXTCONTR =====================voidMYSOC含换行符号,即只能输入一行信息。用户在接受数据的时候,不能判O”G只有在初始化对话框时才被调用,由于局部变量默认是自动变DVALUE40001#defineAPSNEXTCONTR XXXXX大学学生:XXXXXX:___题目:局域网聊天程序起迄日期:2010.12.20指导教师:XXXXXX不但把Buffer变量封装在类里面,而且把操作Buffer变不但把Buffer变量封装在类里面,而且把操作Buffer变T,SOCKDGRAM,0);bind(udpsd,(LPS要包含如下本功能:1.1客户机端获取本地IP地址获取本地通信K:/***发送信息*/SERVER.MYSOCKSEND(一需求分析2二设计容3三调试分析6五设计总结10六参考文献11此次开发的网络聊天工具可作为个人的交流工具使用,通信的安全性不是很高,但要求信息的响应速度要较快,提供网络即时消息的功能。本聊天需要包含如下本功能:获取本地通信端口获取本地主机名获取从服务器端发送过来的信息给服务器发送用户自定义的数据运行的结果,而对程序代码的结构的良好丝毫不在意,是非常不可取通信地址(字符串格式)**1.运行的结果,而对程序代码的结构的良好丝毫不在意,是非常不可取通信地址(字符串格式)**1.用gethostbyname函号(IDCPORT)、远程IP地址(IDCIPREMOTE)10];/***structhostent{**charFA..获取本地通信端口获取本地主机名获取从服务器端发送过来的信息向客户机发送用户自定义的数据(主函数)(生成对话框)(对话框消息处理函数)(点击确定、点击关闭)WM_INITDIALOG(对话框初始化)WM_COMMAND(用户命令)WM_USE+1(用注册消息)IDOK(用户点击确定)IDCANCEL(用户点击关闭)FD_READ(读取信息消息),IDCSEND,Buffer,sizeof(Buffer)ne,intnShowCmd){DialogBoxParamseWMINITDIALOG:.../***初始化套接字*/认识有所提高。通过实践的学习,我认识到学好计算机要重视实践操,IDCSEND,Buffer,sizeof(Buffer)ne,intnShowCmd){DialogBoxParamseWMINITDIALOG:.../***初始化套接字*/认识有所提高。通过实践的学习,我认识到学好计算机要重视实践操WM_INITDIALOGWM_INITDIALOG(对话框初始化)(启动网络动态链接库)(用户点击确定)IDOK注册自定义网络消息关闭套接字WSACLeanup()IDCANCEL(用户点击关闭)FD_READFD_READ(读取信息消息)1)WM_INITDIALO模G块M**2.用wsprintf函数将主机名传送到形参中*/voM**2.用wsprintf函数将主机名传送到形参中*/voswitch(LOWORD(wParam)){caseIDO*A.本地:LocalPortNum**B.远程:Remot说,只能开启一个客户机和一个服务器,若有多个程序副本在运行,..{caseWM_INITDIALOG:CLIENT.INIT_MYSOCKET(hwndDlg);===========================================voidMYSOCKET::INIT_MYSOCKET(HWND&hwndDlg)udp_sd=socket(AF_INET,SOCK_DGRAM,0);WSAAsyncSelect(udp_sd,hwndDlg,WM_USER+1,FD_READ);}2)IDOK模块{CLIENT.MYSOCK_SEND(hwndDlg);===========================================voidMYSOCKET::MYSOCK_SEND(HWND&hwndDlg)}3)IDCANCE块caseIDCANCEL:CLIENT.END_MYSOCKET(hwndDlg);===========================================voidEND_MYSOCKET(HWND&hwndDlg)}4)FD_REA块caseWM_USER+1:{caseFD_READ:CLIENT.MYSOCK_RECV(hwndDlg);}===========================================voidMYSOCKET::MYSOCK_RECV(HWND&hwndDlg){}装特性给我带来的问题。2)对象是自动变量局部变量,如不作专门====voidMYSOCKET::INITMYSOCKET说,只能开启一个客户机和一个服务器,若有多个程序副本在运行,BUFFER){gethostname(HOSTNAME,s装特性给我带来的问题。2)对象是自动变量局部变量,如不作专门====voidMYSOCKET::INITMYSOCKET说,只能开启一个客户机和一个服务器,若有多个程序副本在运行,BUFFER){gethostname(HOSTNAME,s经过几天的学习与调试,该“局域网聊天程序”仅仅能实现点对点通信,不能实现一对多、多对多、多对一等通信模式,也就是说,只能开启一个客户机和一个服务器,若有多个程序副本在运行,则可能导致接收以与发送数用户在输入数据的时候不能包含换行符号,即只能输入一行信息。用户在接受数据的时候,不能判定它是来自哪台主机。服务器端不能自动发现上线的客户端,同样客户端也不能自动发现上线的服务器端,两者都是在假设对方在线的前提下发送数据的,这是因为该“局域网聊天程序”是基于UDP协议编写的,它是无连接的协议。封装就是把对象的属性和操作结合成一个独立的系统单位,并尽可能隐蔽对象的部细节。通过对抽象结果进行封装,将一部分行为作为外部访问的接口与外部发送联系,而将数据和其他行为进行有效隐藏,就可以达到对数据访问权限的合理控制。通过这种有效隐藏和合理控制,就可以增强数据的安全性,减轻开发软件系统的难度。在类中,封装是通过存取权限实现的。类中的某些成员函数,这样就解决了C++类的封装特性给我带来的问题。局部变量,如不作专门说明为静态变量,都是动态分配存储空间,存储在动态存储区中。这种变量叫自动变量。这种变量只在定义它们的时候才创建,在定义它们的函数返回时系统回收变量所占存储空间。对这些变量存储空间的分配和回收是由系统自动完成的,所以也叫自动变量。一般情况下,不作专门说明的局部变量,均是自动变量。BOOLDialogProc(HWNDhwndDlg,UINTUMsg,WPARAMwParsam,LPARAMlParam){{caseWM_INITDIALOG:CLIENT.INIT_MYSOCKET(hwndDlg);//初始化套接字……………….给该函数的消息“WM_INITDIALO”G只有在初始化对话框时才被调用,由于局部变量默认是自动变量,所以由MYSOCKET类构造的CLIENT对象在每次系统回调该函数的时候,都会被初始化一遍,而这种操作破坏了套接字与本地信息的绑(HWND&hwndDlg){WSAStartup(0x01127.0.0.1:localport**B.远程:127.DIOINVOKED#ifndefAPSTUDIOREADO(HWND&hwndDlg){WSAStartup(0x01127.0.0.1:localport**B.远程:127.DIOINVOKED#ifndefAPSTUDIOREADOPC,0,sizeof(LocalPC));LocalPC...定,因此服务器端于客户机端程序不能正常通信。能够维持它的原始值。MYSOCKET改变为语句程序正常运行程序给服务器端分配的的端口号是5000,给客户机端分配的端口号是4000。程序一直运行的很正常,但偶然的一次测试发现程序间不能正常通信,经过反复的调试、测试并没有发现代码中存在什么问题。我试着改了改用VC++开发的界面生硬、死板,并不友好,若能使用一些开发程序皮肤的库文件,使用户界面更加友好。ePortNum;structsockaddrinLocalK:CLIENT.MYSOCKSEND(hwndDlg);b、调试等各环节的训练,深刻理解、C++程序设计技术,掌握分析行有效隐藏,就可以达到对数据访问权限的合理控制。通过这种有效ePortNum;structsockaddrinLocalK:CLIENT.MYSOCKSEND(hwndDlg);b、调试等各环节的训练,深刻理解、C++程序设计技术,掌握分析行有效隐藏,就可以达到对数据访问权限的合理控制。通过这种有效本程序的逻辑拓扑可以从基于UDP无连接协议的“点对点”拓扑,转化为基于TCP面向连接的“星型”拓扑,以实现多用户之间的回话。若能采用TCP协议,用户间的通信时通过服务器的转发功能实现的,服务器端程序不修改接收的的信息,客户机A先把数据发送给服务器端,然后服务器将数据转发给客户机B,这样对客户机A而言,服务器端是透明的,好像是客户机直接在跟客户机B通信一样。假设服务器端程序在线,当客户端程序上线的时候,服务器端能够自动侦测到客户机端上线,并获取客户在聊天功能(即发送字符信息)成功实现的前提下,可以再加入文件传送功能,使这个“局域网聊天程序”的功能更加强大。带来困难。ItemText函数设置控件IDCRECV,使信息显示在屏幕//////////////////////////////ItemText函数设置控件IDCRECV,使信息显示在屏幕//////////////////////////////**关闭程序*/SERVER.ENDMYSOCKET(hwn1程序整体结构3/192.2各部分子模块功能2.3各子模块代..服务器端和客户机端的信息是自动获取的,不需要用户干预。它将自动获取本地主机名、本地IP地址、本地端下面是在不同计算机上运行客户机端的本地信息截图。只要在“发送:”下面的控件窗口中填入您想要发送的信息,然后按“发送”按钮,即可发送到远程计算机。PC,RemotePC;intlen;/***数据接收、发送PC));WSAAsyncSelect(udpsd,hwnd不但把Buffer变量封装在类里面,而且把操作BufferPC,RemotePC;intlen;/***数据接收、发送PC));WSAAsyncSelect(udpsd,hwnd不但把Buffer变量封装在类里面,而且把操作Buffer变运行的结果,而对程序代码的结构的良好丝毫不在意,是非常不可取客户端、服务器端接收的信息,都会显示在“接收”控件中。经过两个两个星期的实践学习,使我对C++语言、WINDOW程、WINDOWSSOCKET编程有了更进一步的认识和了解,要想学好它重要在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对SOCKETAPI中的一些标准函数库不太了解,还有对函数调用的正确使用不够熟悉,还有对C++语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习C++语言,还是WINDOW程,以与其它的计算机方面的知识都要重在实践,所以以后再学习过程中,我会更加注重实践操作,使自己更好地学好计算机。尤其是在使用SDK编写基于对话框的程序时,接触了全新的WINDOW“消息处理”机制。在参考了众多资料后,成功调试了“局域网聊天程序”的用户界面,这为后期编写SOCKET核心代码提供了基础。编写通信部分核心代由于本次设计接触到了两个全新的领域,一是网络通信程序的编写,另一个是C++面向对象程序的编写,为了在idMYSOCKGETHOSTNAME(TCHAR*HOSTvaluesfornewobjects#ifdefAPSTU值。即把语句MYSOCKETCLIENT(TEXT("127于对话框的程序时,接触了全新的idMYSOCKGETHOSTNAME(TCHAR*HOSTvaluesfornewobjects#ifdefAPSTU值。即把语句MYSOCKETCLIENT(TEXT("127于对话框的程序时,接触了全新的WINDOW“消息处理”机制。..综合运用所学知识,上机解决一些与实际应用结合紧密的、规模较大的问题,逐步掌握软件开发的基本思想、方法和实现步骤,提高实际应用水平。这次课程设计基本上含盖了本学期学习到的C++语言知识点,课设题目要求不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的动手能力以与自学能力。这次课设使我了解我编程思想和编程技巧,也认识了软件生命周期的各个环境,包括构思、设计、编写、调试、发布、文档化、维护和修订。编程的风格也很重要,程序有了良好的编程风格,有良好的程序注释,会在后期调试程序、程序排错过程中获益的;若只关心程序运行的结果,而对程序代码的结构的良好丝毫不在意,是非常不可取的,如果我们希望将来从事编程工作,在这一点上该引起足够的重视。这是严谨的态度,很重要!//COMMON.HclassMYSOCKET{**MYSOCKE构造函数LIENT#defineIDCRECV#defineIDCS10];/***structhostent{**charFA//////////////////////服务器端源代码/。这是严谨的态度,很重要!六参考文献1.JeffreyRicLIENT#defineIDCRECV#defineIDCS10];/***structhostent{**charFA//////////////////////服务器端源代码/。这是严谨的态度,很重要!六参考文献1.JeffreyRicMYSOCKET(TCHARWORDTCHAR*Remote_IP,WORD{}**初始化套接字voidINIT_MYSOCKET(HWND&hwndDlg){udp_sd=socket(AF_INET,SOCK_DGRAM,0);WSAAsyncSelect(udp_sd,hwndDlg,WM_USER+1,FD_READ);}**发送消息voidMYSOCK_SEND(HWND&hwndDlg){}**接收消息voidMYSOCK_RECV(HWND&hwndDlg)BUFFER,"%s",HOSTNAME);}/***获取本),4321,TEXT("127.0.0.1"),6321)SERVER),NULL,(DLGPROC)DialogPr位,并尽可能隐蔽对象的部细节。通过对抽象结果进行封装,将一部BUFFER,"%s",HOSTNAME);}/***获取本),4321,TEXT("127.0.0.1"),6321)SERVER),NULL,(DLGPROC)DialogPr位,并尽可能隐蔽对象的部细节。通过对抽象结果进行封装,将一部..{}**设定本地与远程主机IPvoidMYSOCK_SET_REMOTE(constTCHAR*remote_IP){}**获取本地主机名**1.将主机名保存于成员变量HOSTNAMvoidMYSOCK_GET_HOSTNAME(TCHAR*HOST_BUFFER){wsprintf(HOST_BUFFER,"%s",HOSTNAME);}voidMYSOCKET_GET_PORTNUM(TCHAR*PORT_BUFFER){}voidMYSOCKET_GET_LOCALIP(TCHAR*IP_BUFFER){HOSTENT=gethostbyname(HOSTNAME);}**结束套接字过程voidEND_MYSOCKET(HWND&hwndDlg)、客户端都包含一个接受信息的控件(IDCRECV)、一个用于套接字与本机绑定**4.、客户端都包含一个接受信息的控件(IDCRECV)、一个用于套接字与本机绑定**4.用WSAAsyncSelect函数注ddr"类型的长度****相关函数:MYSOCKET::MY务器端发送过来的信息向客户机发送用户自定义的数据二设计容2.}**WSADAT与SOCKET变量**相关函数:MYSOCKET::INIT_MYSOCKET(HWND&hwndDlg)WSADATAwsaData;SOCKETudp_sd;**Remote_Port_Num==>本地端口号**Remote_PC==>远程通信结构**相关函数:MYSOCKET::MYSOCKET(WORDlocal_port,WORDremote_port)WORDLocal_Port_Num,Remote_Port_Num;**数据接收、发送缓冲区**相关函数:MYSOCKET::MYSOCK_RECV(HWND&hwndDlg)**MYSOCKET::MYSOCK_SEND(HWND&hwndDlg)**保存本地主机名**相关函数:MYSOCKET::MYSOCK_GET_HOSTNAME(TCHAR*HOST_BUFFER)TCHARHOSTNAME[10];)...{recv(udpsd,Buffer,sizeof(valuesfornewobjects#ifdefAPSTU位,并尽可能隐蔽对象的部细节。通过对抽象结果进行封装,将一部域网聊天程序”的功能更加强大。四用户手册4.1)...{recv(udpsd,Buffer,sizeof(valuesfornewobjects#ifdefAPSTU位,并尽可能隐蔽对象的部细节。通过对抽象结果进行封装,将一部域网聊天程序”的功能更加强大。四用户手册4.1程序主界面虽然..==================voidMYSOCKET把指针传送到对象外就能操作对象里面的Buffer变量,但经过uffer),0,(structsockaddr*)&Rem==================voidMYSOCKET把指针传送到对象外就能操作对象里面的Buffer变量,但经过uffer),0,(structsockaddr*)&Rem要包含如下本功能:1.1客户机端获取本地IP地址获取本地通信//SERVER.CPPTCHARPORT_BUFFER[10];TCHARHOST_BUFFER[10];TCHARIP_BUFFER[20];//TCHARIP_REMOTE_BUFFER[20];BOOLDialogProc(HWNDhwndDlg,UINTUMsg,WPARAMwParam,LPARAMIParam);intWINAPIWinMain(HINSTANCEhInstance,LPSTRlpCmdLine,{MAKEINTRESOURCE(IDD_SERVER),NULL,}BOOLDialogProc(HWNDhwndDlg,UINTUMsg,WPARAMwParam,LPARAMlParam){{caseWM_INITDIALOG:远程通信结构****3.len==>"structsockaak;}returnTRUE;caseWMUSER+1:17界面是一致的,所以在使用上不会给用户带来困难。...远程通信结构****3.len==>"structsockaak;}returnTRUE;caseWMUSER+1:17界面是一致的,所以在使用上不会给用户带来困难。...服务器端SOCKADDR)&LocalPC,sizeof(Local..**初始化套接字SERVER.INIT_MYSOCKET(hwndDlg);**1.将本地IP地址保存于IP_BUFFER变量SERVER.MYSOCKET_GET_LOCALIP(IP_BUFFER);**1.将本地主机名保存于HOST_BUFFE量**2.将其显示在IDC_HOST控件中SERVER.MYSOCK_GET_HOSTNAME(HOST_BUFFER);**1.将本机通信端口保存于PORT_B
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 购销合同管理的研究与实践
- 走读生自觉培养自我反思能力保证书
- 足疗店合作联盟合同协议
- 软件产品购买合同
- 软件维护更新协议
- 轻松掌握设备采购招标文件
- 轻质隔墙板购买协议
- 违反行业道德规范的承诺
- 酒店布草供应商采购协议
- 酒店餐具订购协议
- GB/T 12996-2024电动轮椅车
- 2024年智能制造生产线安装合同
- 介绍鲁滨逊课件
- 彩色喷涂产线项目可行性研究报告写作模板-拿地申报
- 2024年保密知识测试题含答案(综合题)
- 2024年园林绿化建设合同
- 2024-2030年中国吸气剂(消气剂)产业前景预测及发展风险分析报告
- 商务部门消防安全培训课件
- 2024-2025学年甘肃省兰州五十八中教育集团高三(上)建标数学试卷(含答案)
- 山东省房屋市政工程安全监督机构人员业务能力考试题库-中(多选题)
- 国企治理实战100问
评论
0/150
提交评论