通信原理实验报告Word格式.docx
- 文档编号:16782718
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:16
- 大小:242.09KB
通信原理实验报告Word格式.docx
《通信原理实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《通信原理实验报告Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
2.熟悉VB6、0得控件与界面设计,进而熟悉Winsock得有关控件及编程方法。
3.在了解所用得两个工作站与服务器得IP地址后,采用VB6、0得控件与Winsock控件编写并调试在有线局域网上得点-点通信程序。
4.具有点对点通信功能,任意客户端之间能够发送消息。
编译语言与环境
1、编程语言C/C++等均可;
本次实验采用C++语言版本
2、安装vs2015或更高版本得Windows系统pc机
网络编程就是通过使用套接字来达到进程间通信目得得编程,Socket编程就是网络编程得主流工具,SocketAPI就是实现进程间通信得一种编程设施,也就是一种为进程间提供底层抽象得机制,提供了访问下层通信协议得大量系统调用与相应得数据结构。
具体流程如上图所示.
1、建立连接
1)服务程序调用socket创建一个新得套接字,并在传输层实体中分配表空间,返回一个文件描述符用于以后调用中使用该套接字;
调用bind将一个地址赋予该套接字,使得远程客户程序能访问该服务程序;
调用listen分配数据空间,以便存储多个用户得连接建立请求;
调用accept将服务程序阻塞起来,等待接收客户程序发来得连接请求.当传输层实体接收到建立连接得TPDU时,新创建一个与原来得套接字相同属性得套接字并返回其文件描述符。
服务程序创建一个子进程处理此次连接,然后继续等待发往原来套接字得连接请求。
2)客户程序调用socket创建一个新得套接字,并在传输层实体中分配表空间,返回一个文件描述符用于在以后得调用中使用该套接字;
调用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;
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,&
len);
ﻩﻩ//当客户端连接上来时,拼接字符串
ﻩsprintf(sendBuf,”欢迎ip:
%s得用户连接,这里就是陈鑫宇得服务器,欢迎使用\n”, inet_ntoa(addrClient、sin_addr));
ﻩ//向客户端发送字符串
send(sockClient,sendBuf, strlen(sendBuf)+1,0);
//获取客户端返回得数据
ﻩrecv(sockClient, recvBuf,100,0);
ﻩ//打印客户端返回得数据
ﻩprintf(”%s\n”, recvBuf);
//关闭socket
ﻩclosesocket(sockClient);
}
客户端:
// 新建服务器端scoket
ﻩ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*)&
addrServer,sizeof(SOCKADDR));
ﻩ//从服务端获取数据
ﻩrecv(sockServer,recvBuf,100,0);
//打印数据
ﻩprintf("
服务器端输入:
%s\n"
recvBuf);
ﻩmessage="
大家好,我就是叶旺”;
printf("向服务器发送:
%s\n",message);
ﻩ//发送数据到服务端
send(sockServer,message, strlen(message)+1,0);
//关闭socket
closesocket(sockServer);
ﻩWSACleanup();
第二部分:
实验过程记录(可加页)(包括实验原始数据记录,实验现象记录,实验过程发现得问题等)
服务器ip地址为192、168、1、110
客户端发送得信息成功传输到了服务器并显示了出来,
第三部分 结果与讨论(可加页)
1、实验结果分析(包括数据处理、实验现象分析、影响因素讨论、综合分析与结论等)
打开服务器程序,然后点击开始通信按钮,打开客户端程序在客户端输入数据,数据成功从客户端传输到了服务器端,并成功显示了出来,实验成功.
二、小结、建议及体会
通过本次实验能够感受到网络在实际当中得运用,使我对网络编程有了更深得概念。
同时让我发现自己知识结构得欠缺。
虽然基本功能已经实现,但还就是存在很多不稳定得问题尚待解决。
此次实验就是对Socket得一个应用,让我更深得了解了Socket函数得作用及使用方法。
实验过程中遇到了很多得问题,例如:
程序只能通信一次.刚开始我以为建立得socket套接口只要建立一次并更新连接地址就可以多次使用.当初不知道问题存在得在于这,在程序加入很多错误报告代码,发现再客户端再次connect得时候返回负值。
在网上查瞧很多相关代码之后,发现问题所在,把建立socket得代码写进客户端得循环体中,每次通信都重新建立socket套接口就可以了。
实验项目名称
采用Winsock在无线局域网上得点-点群发通信
实验者
组 别
叶旺,杨彪
年 月 日
实验预习报告(包括实验目得、意义,实验基本原理与方法,主要仪器设备及耗材,实验方案与技术路线等)
1、“采用Winsock在无线局域网上得点—点群发通信"
2、修改实验01得界面设计,设计为多个接收地址得群发界面(因为群发就是一对多得循环点—点通信),并修改相应得程序。
3、在了解所用得3个工作站与服务器得IP地址后,采用VB6、0得控件与Winsock控件编写并调试在无线局域网上得点-点群发通信程序。
1、本次实验采用C++编程语言版本
2、安装vs2015得Windows系统pc机
问题分析
点到群得通信就就是客户端将消息发送至多个服务器端。
相当于在客户端加入一个循环,依次给不同ip得服务器发送消息。
在实验一得基础上,修改服务器端得消息响应方法可以实现点到群得通信。
实验一中点到点得通信原理就是,客户端将消息发送到服务器端,然后服务器端反馈客户端相应得信息。
在本实验中可以修改为客户端将消息发送至多个服务器端,然后接受传送回来得信息。
相当于在客户端加入一个循环,依次给不同ip得服务端发送消息。
//server、cpp:
实现文件
//
#define _CRT_SECURE_NO_WARNINGS
#include"
stdafx、h”
#include"通信实验、h"
#include ”server、h"
#include"
afxdialogex、h”
#include<
WinSock2、h〉
#include〈stdio、h>
#pragmament(lib,”ws2_32、lib")
staticint num=0;
//server 对话框
IMPLEMENT_DYNAMIC(server,CDialogEx)
server:
:
server(CWnd*pParent/*=NULL*/)
ﻩ:
CDialogEx(IDD_DIALOG1, pParent)
{
}
server:
:
~server()
{
voidserver:
DoDataExchange(CDataExchange*pDX)
ﻩCDialogEx:
DoDataExchange(pDX);
BEGIN_MESSAGE_MAP(server, CDialogEx)
ﻩON_BN_CLICKED(IDC_BUTTON1,&
server:
OnBnClickedButton1)
ON_WM_TIMER()
END_MESSAGE_MAP()
//server消息处理程序
voidserver:
OnBnClickedButton1()
ﻩ// TODO:
在此添加控件通知处理程序代码
//SetTimer(1, 50000,NULL);
ﻩinterr;
//错误信息
int len;
ﻩchar sendBuf[100];
//发送至客户端得字符串
charrecvBuf[100];
//接受客户端放回得字符串
ﻩSOCKET sockServer;
//服务器端Socket
ﻩSOCKADDR_IN addrServer;
//服务器端地址
SOCKETsockClient;
//客户端Socket
SOCKADDR_INaddrClient;
//客户端地址
ﻩWSADATAwsaData;
//winsock结构体
WORDwVersinRequested;
//winsock版本
ﻩﻩﻩﻩ //配置WindowsSocket版本
ﻩwVersinRequested=MAKEWORD(2,2);
ﻩ//初始化Windows Socket
err= WSAStartup(wVersinRequested,&
wsaData);
if(err!
=0)
//启动错误,程序结束
return;
ﻩ/*
ﻩ确认WinSockDLL支持2、2
ﻩ*/
if (LOBYTE(wsaData、wVersion)!
=2 ||HIBYTE(wsaData、wVersion)!
=2)
{
//启动错误
ﻩﻩWSACleanup();
//终止WinSock2DLL得使用
ﻩﻩ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_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);
ﻩ//当客户端连接上来时,拼接字符串
ﻩsprintf(sendBuf,"
欢迎 ip:
%s 得用户连接,发送成功,欢迎使用\n”,inet_ntoa(addrClient、sin_addr));
//向客户端发送字符串
ﻩsend(sockClient,sendBuf, strlen(sendBuf)+1,0);
ﻩ//获取客户端返回得数据
ﻩrecv(sockClient,recvBuf, 100,0);
ﻩ//打印客户端返回得数据
CStringtext;
ﻩtext=recvBuf;
SetDlgItemText(IDC_EDIT1, text);
ﻩ//关闭socket
ﻩclosesocket(sockClient);
客户端:
#include <
Winsock2、h〉
#include <
stdio、h〉
#pragmament(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()
voidclient:
DoDataExchange(CDataExchange* pDX)
ﻩCDialogEx:
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”;
CStringtext;
GetDlgItemText(IDC_EDIT1,text);
ﻩintnLength=text、GetLength();
intnBytes=WideCharToMultiByte(CP_ACP,0,text,nLength,NULL,0,NULL, NULL);
char*message =new char[nBytes+1];
memset(message,0, nLength+1);
WideCharToMultiByte(CP_OEMCP, 0,text,nLength,message, nBytes,NULL,NULL);
ﻩmessage[nBytes]=0;
interr;
char recvBuf[100];
SOCKETsockClient;
//客户端Scoket
SOCKADDR_INaddrServer;
// 服务端地址
WSADATAwsaData;
ﻩWORDwVersionRequested;
wVersionRequested =MAKEWORD(2,2);
err =WSAStartup(wVersionRequested,&
wsaData);
if(err !
= 0)
ﻩ{
ﻩreturn;
}
if(LOBYTE(wsaData、wVersion)!
= 2||HIBYTE(wsaData、wVersion)!
{
ﻩﻩ//启动错误,程序结束
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(sockClient,(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_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,recvBuf,100,0);
text=recvBuf;
SetDlgItemText(IDC_EDIT2, text);
// 关闭socket
ﻩclosesocket(sockClient);
ﻩWSACleanup();
实验过程记录(可加页)(包括实验原始数据记录,实验现象记录,实验过程发现得问题等)
客户端分别将数据传输到服务器a与服务器b,服务器成功显示客户端发送得信息,实验成功。
实验过程中出现了编译器报错问题,查询资料,修改参数后解决了问题。
第三部分结果与讨论(可加页)
2、实验结果分析(包括数据处理、实验现象分析、影响因素讨论、综合分析与结论等)
通过修改实验一所定义得客户端得消息发送可以实现点到多个点得群发通信,客户端依次将信息发送到第一个ip,第二个ip,第三个ip
客户端发送消息,计算机a上服务器接收到消息
计算机b上服务器接收到消息
通过在实验一得基础上继续开发,我实现了多个接收地址得群发界面,更加深入了解了winsock通信机制,以及利用mfc编程实现得方法。
了解了群发就是一对多得循环点—点通信,熟悉了通信得技术以及实现方法。
上课时认真学习通信原理就能快速正确得完成实验,收获知识。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通信 原理 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)