已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理职业荣誉观与服务态度
- 2026年中考英语专项复习:环境保护、保护野生动物等 常考话题作文练习题(含答案+范文)
- 2026年高考数学一轮复习:数列求和(讲义)原卷版
- Unit 3【刷易错】(模块易错检测练)原卷版-2025-2026学年七年级英语上册(人教版)
- 医学生基础医学 代谢性疾病护理课件
- 医学生基础医学 腹腔引流管拔管护理课件
- 医学生基础医学 CT 检查后护理课件
- 2026全国春季高考物理学业考试总复习:运动的描述(知识梳理+考点)原卷版
- 医学脑梗死言语康复训练案例分析课件
- 医学流行病学数字哨兵应用教学课件
- 利润问题-2023-2024学年六年级数学上册典型例题解析苏教版
- 武夷山风景区的总体规划
- 卫生统计学智慧树知到答案章节测试2023年湖南中医药大学
- 科研方法与论文写作
- BIM大赛考试基本知识题库题
- 比亚迪F6电器维修手册
- JB/T 20013-2017双锥回转式真空干燥机
- GB/T 13006-2013离心泵、混流泵和轴流泵汽蚀余量
- 电子秤课程设计
- Q∕SY 127-2007 水驱油田井间示踪技术规范
- 钢结构厂房施工平面布置及施工进度计划表
评论
0/150
提交评论