资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
第9页 / 共12页
第10页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
网络编程大作业学院:信息工程及自动化 专业:通信工程班级:092学号:200910404214姓名:罗鹏飞成绩:在TCP网络编程中,最核心的就是TCP编程理念,所以在此我选择了 TCP 标准框架-客户端和服务端的程序设计进行分析。本系统是一种基于Socket 的局域网通信工具的设计与实现方法。基于Socket的局域网通信软件可以为局 域网提供一种良好,安全,快速的通信机制。它的实现无需对原有的局域网硬件 进行任何改动,具有实现成本低廉的优点,它的使用能有效地降低局域网通信负 荷,提高局域网的使用效率,可以很好地解决局域网的各种通信需求。主要使 用的是套接字的方式,套接字是一种支持TCP/IP网络通信的简单单元,要通过 Internet进行通信,至少 需要一对套接字,其中一个运行 在客户端,称之 为ClientSocket,另一个运行于服务器端面,称 为ServerSocket。根据连 接启动的方式以及本地要连接的目标,套接字之间的连接过程可以分为三 个步骤:服务器监听、客户端请求、连接确认(为tcp的基本思想)。服务 器监听是指服务端套接字并不定位具体的客户端套接字,而是处于等待连 接的状态,实时监控网络状态。客户端请求是由客户端的套接字提出连接 请求,要连接的目标是服务器端套接字。为此,客户端的套接字必须首先 描述它要连接的服务器的套接字,指出服务器套接字的地址和端口号,然 后再向服务器端套接字提出连接请求。连接确认是当服务器端套接字监听 到或者说接收到客户端套接字的连接请求时,它就响应客户端套接字的请 求,建立一个新的线程,把服务器端套接字的信息发送给客户端,一旦客 户端确认了此连接,连接即可建立。而服务器端继续处于监听状态,继续 接收其他客户端的连接请求。通过标准框架编写TCP服务器与客户端合成的 工程软件步骤:客户端程序包括程序文件client.dsw 资源文件client.rc。界面文件服务器端程序包括 程序文件server.dsw资源文件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-ReceiveDa ta();为接到TCP客户端SEND发送的数据后,服务器自动执行的接 收函数。 在ClientSocket.cpp文件中 函数void CClientSocket:OnReceive(int nErrorCode)m_pDlg-SendFileData();为接到TCP服务器SEND发送的数据后,客户端自动执行的接 收函数。在TransFileDlg.h (对话框的类头文 件)定义:CServerSocke t* m_pServerSock; /为负责服务器监听和响应客户端连接请求的SOCKET对象指针。CServerSocket* m_ServerSock; / 为负责和客户端进行数据通信 (RECEIVE、SEND)SOCKET 对象指针。CClientSocket* m_pSendSock; /为负责客户端向 服务器端发起连接请求,连接成功后又通过它和服务器建立通信 链路(SEND,RECEIVE )进行 发送和接收。在文件 TransFileDlg.cpp 中 BOOL CTransFileDlg:OnInitDialogO窗体初始化函数加入m_pServerSock = new CServerSocke t(t his);/创建扌旨针m_ServerSock = new CServerSocket(this);m_pSendSock = new CClientSocket(this);m_pServerSock-Create(SERVERPORT);/服务器 SOCKET绑定m_pSendSock-Create(CLIENTPORT);/客户端 SOCKET绑定if (!m_pServerSock-Lis ten() /服务器开始监听MessageBox(监听失败);在本事件(发 送按钮)激发函数中建立客户端向服务器的连接,并发送数据。void CTransFileDlg:OnButtontrans()if (m_Send二二FALSE)m_pSendSock-Close();m_pSendSock-Create(CLIENTPORT);if (!m_pSendSock-Connect(host,SERVERPORT)int aa = m_pSendSockGetLastError();m_SendFile.Close();m_pSendSock-Close();m_pSendSock-Create(CLIENTPORT);MessageBox(连接失败);m_Send = FALSE;return;Set Timer(l,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_pServerSockAccept(*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); / 创建套接字对象讦(!pMysocket-Create() / 创建套接字delete pMysocket;MessageBox(套接字创建失败.);return false;return TRUE;void CClientDlg:OnSysCommand(UINT nID, LPARAM IParam)讦(nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, IParam);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,strl;m_ info.GetWindowText(str);if(str.IsEmpty()lm_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)讦(pClientd lg)pClientd lg-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);/创建与客 户端通信的端口讦(m_pSocket-Accept(*socket) 如果 SOCKET 对象指针接受这个端口, 则响应客户端连接请求return;elsedelete socket;void CServerDlg:OnButton1() / 点击监听/ TODO: Add your control notification handler code herem_pSocket = new CServerSocke
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号