




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
网络编程大作业 学院:信息工程及自动化 专业:通信工程 班级:092 学号:200910404206 姓名:王文博 这次我选择了客户端和服务端的程序设计进行分析。本系统是一种基于Socket的局域网通信工具的设计与实现方法。基于Socket的局域网通信软件可以为企业原有的局域网提供一种良好,安全,快速的通信机制。它的实现无需对企业原有的局域网硬件进行任何改动,具有实现成本低廉的优点,它的使用能有效地降低局域网通信负荷,提高局域网的使用效率,可以很好地解决企业内部局域网的各种通信需求。 主要使用的是套接字的方式,套接字是一种支持TCP/IP网络通信的简单单元,要通过Internet进行通信,至少需要一对套接字,其中一个运行在客户端,称之为ClientSocket,另一个运行于服务器端面,称为ServerSocket。根据连接启动的方式以及本地要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听、客户端请求、连接确认。服务器监听是指服务端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。客户端请求是由客户端的套接字提出连接请求,要连接的目标是服务器端套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器套接字的地址和端口号,然后再向服务器端套接字提出连接请求。连接确认是当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的信息发送给客户端,一旦客户端确认了此连接,连接即可建立。而服务器端继续处于监听状态,继续接收其他客户端的连接请求。通过标准框架编写TCP服务器与客户端合成的工程软件步骤:客户端程序包括程序文件client.asm和资源文件client.rc。资源文件确定了客户端的界面形式。服务器端程序包括程序文件server.asm和资源文件server.rc。资源文件确定了服务器端的界面形式。在以下两个头文件ServerSocket.h:ClientSocket.h:中加入服务器窗体的对象指针CTransFileDlg* m_pDlg;在ServerSocket.cpp文件中函数void CServerSocket:OnAccept(int nErrorCode) m_pDlg-AcceptConnection();为接到TCP客户端CONNECT 请求后服务器自动执行的相应函数。void CServerSocket:OnReceive(int nErrorCode) m_pDlg-ReceiveData();为接到TCP客户端SEND发送的数据后,服务器自动执行的接收函数。在ClientSocket.cpp文件中函数void CClientSocket:OnReceive(int nErrorCode) m_pDlg-SendFileData();为接到TCP服务器SEND发送的数据后,客户端自动执行的接收函数。在TransFileDlg.h(对话框的类头文件)定义:CServerSocket* m_pServerSock; / 为负责服务器监听和响应客户端连接请求的SOCKET对象指针。CServerSocket* m_ServerSock; / 为负责和客户端进行数据通信(RECEIVE、SEND)SOCKET对象指针。CClientSocket* m_pSendSock; / 为负责客户端向服务器端发起连接请求,连接成功后又通过它和服务器建立通信链路(SEND,RECEIVE)进行发送和接收。在文件TransFileDlg.cpp 中 BOOL CTransFileDlg:OnInitDialog() 窗体初始化函数加入 m_pServerSock = new CServerSocket(this); /创建指针m_ServerSock = new CServerSocket(this);m_pSendSock = new CClientSocket(this);m_pServerSock-Create(SERVERPORT); /服务器SOCKET绑定m_pSendSock-Create(CLIENTPORT); /客户端SOCKET绑定if (!m_pServerSock-Listen() / 服务器开始监听MessageBox(监听失败);在本事件(发送按钮)激发函数中建立客户端向服务器的连接,并发送数据。void CTransFileDlg:OnButtontrans() if (m_Send=FALSE) m_pSendSock-Close();m_pSendSock-Create(CLIENTPORT);if (!m_pSendSock-Connect(host,SERVERPORT)int aa = m_pSendSock-GetLastError();m_SendFile.Close();m_pSendSock-Close();m_pSendSock-Create(CLIENTPORT);MessageBox(连接失败);m_Send = FALSE;return;SetTimer(1,2000,NULL);/发送文件信息m_SendNum = 0;m_pSendSock-Send(fileinfo,MAX_PATH+4);m_SendLen = 0;LocalFree(fileinfo);elseMessageBox(当前发送任务没有完成);本函数实现服务器相应客户端的连接,并创建和客户端通信的通路:void CTransFileDlg:AcceptConnection()m_ServerSock-Close();m_pServerSock-Accept(*m_ServerSock);服务器接收到数据后的对应处理函数:void CTransFileDlg:ReceiveData()客户端接收到数据后的对应处理函数:void CTransFileDlg:SendFileData()下面是我对部分源程序的分析:客服端程序:ClientDlg.cpp:#include stdafx.h#include Client.h#include ClientDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifpMysocket = new CMysocket(this); /创建套接字对象if (!pMysocket-Create() /创建套接字delete pMysocket;MessageBox(套接字创建失败.);return false;return TRUE;void CClientDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal(); elseCDialog:OnSysCommand(nID, lParam);void CClientDlg:ReceiveData()char buffer200;/接收传来的数据int factdata = pMysocket-Receive(buffer,200);bufferfactdata = 0;CString str;str.Format(%s,buffer);SetDlgItemText(IDC_EDIT4,str);void CClientDlg:OnButtonjoin() /点击连接/ TODO: Add your control notification handler code hereUpdateData(true);CString servername = m_servername; /读取服务器名称int port;port = 70; /获取端口if(!pMysocket-Connect(servername,port) /连接服务器,如果没有连接到服务器名称、端口号,连接服务器失败MessageBox(连接服务器失败!);return;CString str;str.Format(%s-%s,m_name,进入聊天室);/打出字 昵称 进入聊天室pMysocket-Send(str.GetBuffer(0),str.GetLength();GetDlgItem(IDC_BUTTONJOIN)-EnableWindow(FALSE);void CClientDlg:OnButton2() /点击发送CString str,temp,str1;m_info.GetWindowText(str);if(str.IsEmpty()|m_name.IsEmpty()return;temp.Format(%s说: %s,m_name,str);pMysocket-Send(str.GetBuffer(str.GetLength(),str.GetLength();Mysocket.cpp:void CMysocket:OnReceive(int nErrorCode) if (pClientdlg) pClientdlg-ReceiveData();/调用主对话框的ReceiveData方法接收数据CSocket:OnReceive(nErrorCode);服务端程序:ServerDlg.cpp :#include stdafx.h#include Server.h#include ServerDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifvoid CServerDlg:AcceptConnect()/服务器接受客户端的连接CClientSocket* socket = new CClientSocket(this);/创建与客户端通信的端口if (m_pSocket-Accept(*socket)/如果SOCKET对象指针接受这个端口,则响应客户端连接请求return;elsedelete socket;void CServerDlg:OnButton1() /点击监听/ TODO: Add your control notification handler code herem_pSocket = new CServerSocket(this);/负责服务器监听的socket对象指针=创建套接字if (!m_pSocket-Create(70)/创建的端口!=70MessageBox(套接字创建失败);delete m_pSocket;m_pSocket = NULL;return;if (!m_pSocket-Listen()/如果没有连接到listen函数,则监听失败MessageBox(监听失败);void CServerDlg:ReceiveData(CClientSocket* socket)CString str_ii;char bufferdata200;/创建缓存/接收客户端传来的数据int result = socket-Receive(bufferdata,200);bufferdataresult = 0;CString str;str.Format(%s,bufferdata);SetDlgItemText(IDC_EDIT1,str);/在编辑框显
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025防灾减灾公共基础知识考试题库(含答案)
- 知识产权培训年度计划课件
- 潮汕美食课件
- 2025年广东省广州市花都区中考一模数学试题及答案
- 钢琴集体课趣味课件
- 2025证券从业资格证券市场基本法律法规章节测试题及答案
- 钢桥桥梁钢材课件
- 2025年证券从业资格考试试题及答案详解
- 2025年年安全管理试题答案解析
- 《公共政策概论》2025年1月考试试题及答案
- 2025年交社保免责协议书
- 语文开学第一课课件2025-2026学年统编版语文七年级上册
- 2025年军队文职招聘-军队文职技能岗-军队文职招聘(电工)历年参考题库含答案解析(5套)
- (2025年标准)签夫妻忠诚协议书
- 2025年宁夏中考数学试卷试题真题(含答案详解)
- 肿瘤重点专科汇报
- 2024年杭州市公务员考试行测真题及完整答案详解一套
- 2025 八项规定应知应会100题题库及参考答案详解(综合题)
- 单位保安执勤方案(3篇)
- 二三轮车安全知识培训课件
- 2025年安徽省普通高中学业水平选择性考试(思想政治)科目高考真题+(答案解析版)
评论
0/150
提交评论