ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:266.58KB ,
资源ID:5795992      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5795992.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(通信原理实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

通信原理实验报告.docx

1、通信原理实验报告学生学号 0121410880117实验课成绩学 生 实 验 报 告 书实验课程名称通信原理开 课 学 院计算机科学与技术学院指导教师姓名刘维学 生 姓 名陈鑫宇学生专业班级软件工程14012015-2016学年第2学期实验课程名称:_通信原理_ 实验项目名称采用Winsock在有线局域网上的点-点通信实验成绩实 验 者陈鑫宇专业班级软件1401组 别同 组 者叶旺实验日期 年 月 日一部分:实验预习报告(包括实验目的、意义,实验基本原理与方法,主要仪器设备及耗材,实验方案与技术路线等)实验目的与要求1.“采用Winsock在有线局域网上的点-点通信”2.熟悉VB6.0的控件和

2、界面设计,进而熟悉Winsock的有关控件及编程方法。3.在了解所用的两个工作站和服务器的IP地址后,采用VB6.0的控件和Winsock控件编写并调试在有线局域网上的点-点通信程序。4.具有点对点通信功能,任意客户端之间能够发送消息。编译语言与环境1.编程语言C/C+等均可;本次实验采用C+语言版本2.安装vs2015或更高版本的Windows系统pc机 网络编程是通过使用套接字来达到进程间通信目的的编程,Socket编程是网络编程的主流工具,Socket API是实现进程间通信的一种编程设施,也是一种为进程间提供底层抽象的机制,提供了访问下层通信协议的大量系统调用和相应的数据结构。具体流程

3、如上图所示。1、建立连接1)服务程序调用socket创建一个新的套接字,并在传输层实体中分配表空间,返回一个文件描述符用于以后调用中使用该套接字;调用bind将一个地址赋予该套接字,使得远程客户程序能访问该服务程序;调用listen分配数据空间,以便存储多个用户的连接建立请求;调用accept将服务程序阻塞起来,等待接收客户程序发来的连接请求。当传输层实体接收到建立连接的TPDU时,新创建一个和原来的套接字相同属性的套接字并返回其文件描述符。服务程序创建一个子进程处理此次连接,然后继续等待发往原来套接字的连接请求。2)客户程序调用socket创建一个新的套接字,并在传输层实体中分配表空间,返回

4、一个文件描述符用于在以后的调用中使用该套接字;调用connect阻塞客户程序,传输层实体开始建立连接,当连接建立完成时,取消阻塞;2、数据传输 双方使用send和receive完成数据的全双工发送。3、释放连接 每一方使用close原语单独释放连接。关键代码示例:服务器端:/定义服务器端socket sockServer = socket(AF_INET, SOCK_STREAM,0); /设置服务器端socket addrServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY);/本机IP addrServer.sin_family = AF_INET;

5、 addrServer.sin_port = htons(6000); /将服务器socket绑定在本地端口 bind(sockServer, (SOCKADDR *)&addrServer, sizeof(SOCKADDR); /Listen监听端口 listen(sockServer, 10);/10为等待连接数目 printf(服务器已启动:n监听中.n); len = sizeof(SOCKADDR); while (1) /accept会阻塞进程,直到有客户端连接上来为止 sockClient = accept(sockServer, (SOCKADDR*)&addrClient,

6、&len); /当客户端连接上来时,拼接字符串 sprintf(sendBuf, 欢迎 ip:%s 的用户连接,这里是陈鑫宇的服务器,欢迎使用n, inet_ntoa(addrClient.sin_addr); /向客户端发送字符串 send(sockClient, sendBuf, strlen(sendBuf) + 1, 0); /获取客户端返回的数据 recv(sockClient, recvBuf, 100, 0); /打印客户端返回的数据 printf(%sn, recvBuf); /关闭socket closesocket(sockClient); 客户端:/ 新建服务器端scok

7、et sockServer = socket(AF_INET, SOCK_STREAM, 0); / 定义要连接的服务端地址 addrServer.sin_addr.S_un.S_addr = inet_addr(10.139.14.180);/ 目标IP (100.64.175.119是本机地址) addrServer.sin_family = AF_INET; / 协议类型是INET addrServer.sin_port = htons(6000);/ 连接端口1234 / 让 sockClient 连接到 服务端 connect(sockServer, (SOCKADDR *)&add

8、rServer, sizeof(SOCKADDR); / 从服务端获取数据 recv(sockServer, recvBuf, 100, 0); / 打印数据 printf(服务器端输入:%sn, recvBuf); message = 大家好,我是叶旺; printf(向服务器发送:%sn,message); / 发送数据到服务端 send(sockServer, message, strlen(message) + 1, 0); / 关闭socket closesocket(sockServer); WSACleanup();第二部分:实验过程记录(可加页)(包括实验原始数据记录,实验现象

9、记录,实验过程发现的问题等)服务器ip地址为192.168.1.110客户端发送的信息成功传输到了服务器并显示了出来,第三部分 结果与讨论(可加页)一、实验结果分析(包括数据处理、实验现象分析、影响因素讨论、综合分析和结论等)打开服务器程序,然后点击开始通信按钮,打开客户端程序在客户端输入数据,数据成功从客户端传输到了服务器端,并成功显示了出来,实验成功。二、小结、建议及体会 通过本次实验能够感受到网络在实际当中的运用,使我对网络编程有了更深的概念。同时让我发现自己知识结构的欠缺。虽然基本功能已经实现,但还是存在很多不稳定的问题尚待解决。 此次实验是对Socket的一个应用,让我更深的了解了S

10、ocket函数的作用及使用方法。实验过程中遇到了很多的问题,例如:程序只能通信一次。刚开始我以为建立的socket套接口只要建立一次并更新连接地址就可以多次使用。当初不知道问题存在的在于这,在程序加入很多错误报告代码,发现再客户端再次connect的时候返回负值。在网上查看很多相关代码之后,发现问题所在,把建立socket的代码写进客户端的循环体中,每次通信都重新建立socket套接口就可以了。 实验项目名称采用Winsock在无线局域网上的点-点群发通信实验成绩实 验 者陈鑫宇专业班级软件1401组 别同 组 者叶旺,杨彪实验日期 年 月 日一部分:实验预习报告(包括实验目的、意义,实验基本

11、原理与方法,主要仪器设备及耗材,实验方案与技术路线等)实验目的与要求1.“采用Winsock在无线局域网上的点-点群发通信”2.修改实验01的界面设计,设计为多个接收地址的群发界面(因为群发是一对多的循环点-点通信),并修改相应的程序。3.在了解所用的3个工作站和服务器的IP地址后,采用VB6.0的控件和Winsock控件编写并调试在无线局域网上的点-点群发通信程序。编译语言与环境1.本次实验采用C+编程语言版本2.安装vs2015的Windows系统pc机问题分析点到群的通信就是客户端将消息发送至多个服务器端。相当于在客户端加入一个循环,依次给不同ip的服务器发送消息。在实验一的基础上,修改

12、服务器端的消息响应方法可以实现点到群的通信。实验一中点到点的通信原理是,客户端将消息发送到服务器端,然后服务器端反馈客户端相应的信息。在本实验中可以修改为客户端将消息发送至多个服务器端,然后接受传送回来的信息。相当于在客户端加入一个循环,依次给不同ip的服务端发送消息。关键代码示例:服务器端:/ server.cpp : 实现文件/#define _CRT_SECURE_NO_WARNINGS#include stdafx.h#include 通信实验.h#include server.h#include afxdialogex.h#include#include#pragma comment

13、(lib,ws2_32.lib)static int num = 0;/ server 对话框IMPLEMENT_DYNAMIC(server, CDialogEx)server:server(CWnd* pParent /*=NULL*/) : CDialogEx(IDD_DIALOG1, pParent)server:server()void server:DoDataExchange(CDataExchange* pDX) CDialogEx:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(server, CDialogEx) ON_BN_CLICKED(ID

14、C_BUTTON1, &server:OnBnClickedButton1) ON_WM_TIMER()END_MESSAGE_MAP()/ server 消息处理程序void server:OnBnClickedButton1() / TODO: 在此添加控件通知处理程序代码 /SetTimer(1, 50000, NULL); int err;/错误信息 int len; char sendBuf100;/发送至客户端的字符串 char recvBuf100;/接受客户端放回的字符串 SOCKET sockServer;/服务器端Socket SOCKADDR_IN addrServer;

15、/服务器端地址 SOCKET sockClient;/客户端Socket SOCKADDR_IN addrClient;/客户端地址 WSADATA wsaData;/winsock结构体 WORD wVersinRequested;/winsock版本 /配置Windows Socket版本 wVersinRequested = MAKEWORD(2, 2); /初始化Windows Socket err = WSAStartup(wVersinRequested, &wsaData); if (err != 0) /启动错误,程序结束 return; /* 确认WinSock DLL支持2

16、.2 */ if (LOBYTE(wsaData.wVersion) != 2 | HIBYTE(wsaData.wVersion) != 2) /启动错误 WSACleanup();/终止WinSock 2 DLL的使用 return; /定义服务器端socket sockServer = socket(AF_INET, SOCK_STREAM, 0); /设置服务器端socket addrServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY);/本机IP addrServer.sin_family = AF_INET; addrServer.sin_

17、port = htons(6000); /将服务器socket绑定在本地端口 bind(sockServer, (SOCKADDR *)&addrServer, sizeof(SOCKADDR); /Listen监听端口 listen(sockServer, 5);/5为等待连接数目 printf(服务器已启动:n监听中.n); len = sizeof(SOCKADDR); /accept会阻塞进程,直到有客户端连接上来为止 sockClient = accept(sockServer, (SOCKADDR*)&addrClient, &len); /当客户端连接上来时,拼接字符串 spri

18、ntf(sendBuf, 欢迎 ip:%s 的用户连接,发送成功,欢迎使用n, inet_ntoa(addrClient.sin_addr); /向客户端发送字符串 send(sockClient, sendBuf, strlen(sendBuf) + 1, 0); /获取客户端返回的数据 recv(sockClient, recvBuf, 100, 0); /打印客户端返回的数据 CString text; text = recvBuf; SetDlgItemText(IDC_EDIT1, text); /关闭socket closesocket(sockClient);客户端:#inclu

19、de #include #pragma comment(lib, ws2_32.lib)#include stdafx.h#include 通信实验.h#include client.h#include afxdialogex.h/ client 对话框IMPLEMENT_DYNAMIC(client, CDialogEx)client:client(CWnd* pParent /*=NULL*/) : CDialogEx(IDD_DIALOG2, pParent)client:client()void client:DoDataExchange(CDataExchange* pDX) CDi

20、alogEx:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(client, CDialogEx) ON_BN_CLICKED(IDC_BUTTON1, &client:OnBnClickedButton1)END_MESSAGE_MAP()/ client 消息处理程序void client:OnBnClickedButton1() / TODO: 在此添加控件通知处理程序代码 char* ip1 = 192.168.1.110; char* ip2 = 192.168.1.111; CString text; GetDlgItemText(IDC_EDIT1,

21、text); int nLength = text.GetLength(); int nBytes = WideCharToMultiByte(CP_ACP, 0, text, nLength, NULL, 0, NULL, NULL); char* message = new charnBytes + 1; memset(message, 0, nLength + 1); WideCharToMultiByte(CP_OEMCP, 0, text, nLength, message, nBytes, NULL, NULL); messagenBytes = 0; int err; char

22、recvBuf100; SOCKET sockClient; / 客户端 Scoket SOCKADDR_IN addrServer; / 服务端地址 WSADATA wsaData; WORD wVersionRequested; wVersionRequested = MAKEWORD(2, 2); err = WSAStartup(wVersionRequested, &wsaData); if (err != 0) return; if (LOBYTE(wsaData.wVersion) != 2 | HIBYTE(wsaData.wVersion) != 2) / 启动错误,程序结束

23、 WSACleanup(); return; / 新建客户端 scoket sockClient = socket(AF_INET, SOCK_STREAM, 0); / 定义要连接的服务端地址 addrServer.sin_addr.S_un.S_addr = inet_addr(ip1);/ 目标IP (175.0.170.28是本机地址) addrServer.sin_family = AF_INET; / 协议类型是INET addrServer.sin_port = htons(6000);/ 连接端口1234 / 让 sockClient 连接到 服务端 connect(sockC

24、lient, (SOCKADDR *)&addrServer, sizeof(SOCKADDR); / 发送数据到服务端 send(sockClient, message, strlen(message) + 1, 0); / 从服务端获取数据 recv(sockClient, recvBuf, 100, 0); / 打印数据 text = recvBuf; SetDlgItemText(IDC_EDIT2, text); / 关闭socket closesocket(sockClient); WSACleanup(); / 定义要连接的服务端地址二 addrServer.sin_addr.S

25、_un.S_addr = inet_addr(ip2);/ 目标IP addrServer.sin_family = AF_INET; / 协议类型是INET addrServer.sin_port = htons(6000);/ 连接端口1234 / 让 sockClient 连接到 服务端 connect(sockClient, (SOCKADDR *)&addrServer, sizeof(SOCKADDR); / 发送数据到服务端 send(sockClient, message, strlen(message) + 1, 0); / 从服务端获取数据 recv(sockClient,

26、 recvBuf, 100, 0); / 打印数据 text = recvBuf; SetDlgItemText(IDC_EDIT2, text); / 关闭socket closesocket(sockClient); WSACleanup();第二部分:实验过程记录(可加页)(包括实验原始数据记录,实验现象记录,实验过程发现的问题等)客户端分别将数据传输到服务器a和服务器 b,服务器成功显示客户端发送的信息,实验成功。实验过程中出现了编译器报错问题,查询资料,修改参数后解决了问题。第三部分 结果与讨论(可加页)二、实验结果分析(包括数据处理、实验现象分析、影响因素讨论、综合分析和结论等) 通过修改实验一所定义的客户端的消息发送可以实现点到多个点的群发通信,客户端依次将信息发送到第一个ip,第二个ip,第三个ip客户端发送消息,计算机a上服务器接收到消息计算机b上服务器接收到消息二、小结、建议及体会通过在实验一的基础上继续开发,我实现了多个接收地址的群发界面,更加深入了解了winsock通信机制,以及利用mfc编程实现的方法。了解了群发是一对多的循环点-点通信,熟悉了通信的技术以及实现方法。上课时认真学习通信原理就能快速正确的完成实验,收获知识。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1