基于socket通信系统设计.docx_第1页
基于socket通信系统设计.docx_第2页
基于socket通信系统设计.docx_第3页
基于socket通信系统设计.docx_第4页
基于socket通信系统设计.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于Socket通信系统设计实验报告一、实验目的和要求1、掌握VC+集成开发环境编写网络程序的方法;2、掌握客户/服务器(C/S)应用的工作方式;3、学习网络中进程之间通信的原理和实现方法;二、实验内容所编写的程序应具有如下功能:1.具有点对点通信功能,服务器向客户端发送消息,客户端接收服务器发送的消息并显示;2、具有广播功能,服务器能够向连接到服务器的所有客户端广播消息;三、编程语言和环境1.编程语言C/C+;2.编程环境Windows Visual Studio 2010。四、Socket通信的实现Windows Sockets是一套开放的、支持多种协议的Windows下的网络编程接口,利用Sockets套接字能够实现不同主机间的网络通信。Socket实际是在计算机中建立一个通信端口,可以通过这个端口与任何一个具有Socket接口的计算机通信。目前常用的套接字类型是基于TCP/IP协议的流式套接字,其特点是提供一种可靠的、面向连接的数据传输服务。本实验采用基于TCP/IP协议的流式套接字实现发送方与接收方之间的安全通信。其程序实现流程如下图所示:1.服务器端首先调用socket函数来建立一个套接字;套接字创建成功后,调用bind函数将一个IP地址和端口号绑定到己经建立的socket上;绑定完成之后,服务器等待接收客户端的连接请求,调用listen函数实现监听的功能;监听到连接请求之后,服务器调用accept函数生成一个新的套接口描述符,以接受客户的连接请求,之后调用send/receive函数在套接字上进行数据的读/写,直至完成交换;通信结束之后,调用close函数关闭套接字。服务器socket通信程序:/创建socket套接字连接if(m_hSocket != NULL)closesocket(m_hSocket);m_hSocket = NULL;if(m_hSocket = NULL)m_hSocket = socket(AF_INET, SOCK_STREAM,0);ASSERT(m_hSocket != NULL);m_addr.sin_family = AF_INET;m_addr.sin_addr.S_un.S_addr = INADDR_ANY;m_addr.sin_port = htons(m_nPort);int ret = 0, error = 0;ret = bind(m_hSocket, (LPSOCKADDR)&m_addr, sizeof(m_addr);if(ret = SOCKET_ERROR)TRACE(Bind Error: %d n, (error = WSAGetLastError();return ;ret = listen(m_hSocket, 2);if(ret = SOCKET_ERROR)TRACE(Listen Error: %d n, (error = WSAGetLastError();return ;SOCKET s = accept(m_hSocket, NULL, NULL);if(s = SOCKET_ERROR)TRACE(Accept Error: %d n, (error = WSAGetLastError();return ;/监听接收到信息char buff256;ret = recv(s, buff, 256, 0);if(ret = 0 | ret = SOCKET_ERROR )TRACE(Recv data error: %dn, WSAGetLastError();return ;char* name = NULL;char* pass = NULL;int len = 0;len = buff0;name = new charlen + 1;for(int i = 0; i len; i+)namei = buffi+1;int len2 = bufflen + 1;pass = new charlen2 + 1;for(int i = 0; i len2; i+)passi = buffi + 2 + len;/发送消息代码CString str;if(strcmp(name, ware) != 0)str = _T(用户名不正确!);TRACE(_T(用户名不正确!n);elseif(strcmp(pass, 11111) != 0)str = _T(用户密码不正确!);TRACE(_T(用户密码不正确!n);if(str.IsEmpty()str =_T(我是马琰); str +=SendMsg;char* buf = str.GetBuffer(0);ret = send(s, buf, str.GetLength(), 0);if(ret != str.GetLength()TRACE(Send data error: %dn, WSAGetLastError();return ;2.客户端首先调用socket函数来建立一个套接字;成功创建套接字之后,再调用bind函数,将一个端口绑定到已经建立的socket上;之后客户端便可调用connect函数向服务器请求连接;通信连接建立之后,客户端则可通过调用send/receive函数完成数据交换;通信结束之后,关闭套接字。客户端socket通信程序:/创建socket套接字if(m_hSocket != NULL)closesocket(m_hSocket);m_hSocket = NULL;if(m_hSocket = NULL)m_hSocket = socket(AF_INET, SOCK_STREAM,0);ASSERT(m_hSocket != NULL);m_addr.sin_family = AF_INET;m_addr.sin_addr.S_un.S_addr = inet_addr(m_strServer.GetBuffer(0);m_addr.sin_port = htons(m_nPort);int ret = 0;int error = 0;ret = connect(m_hSocket, (LPSOCKADDR)&m_addr, sizeof(m_addr);if(ret = SOCKET_ERROR)TRACE(Connect Error: %d n, (error = WSAGetLastError();if(error = 10061)AfxMessageBox(_T(请确认服务器确实已经打开并工作在同样的端口!);return ;/监听接收到的信息并显示CString str;str += char(m_strUser.GetLength();str += m_strUser;str += char(m_strPass.GetLength();str += m_strPass;char* buf = str.GetBuffer(0);ret = send(m_hSocket, buf, str.GetLength(), 0);if(ret != str.GetLength()TRACE(Send data error: %dn, WSAGetLastErr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论