信号源实验小结高等教育通信原理实验报告范文Word文档下载推荐.docx
《信号源实验小结高等教育通信原理实验报告范文Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《信号源实验小结高等教育通信原理实验报告范文Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
![信号源实验小结高等教育通信原理实验报告范文Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-12/10/27c5fb07-1483-4e91-8cb9-30974dec9ecf/27c5fb07-1483-4e91-8cb9-30974dec9ecf1.gif)
一个与原来得套接字相同属性得套接字并返回其文件描述符。
服务程序创建一
个子进程处理此次连接,然后继续等待发往原来套接字得连接请求。
客户程序调用ocket创建一个新得套接字,并在传输层实体中分配表空间,返
回一个文件描述符用于在以后得调用中使用该套接字;
调用connect阻塞客
户程序,传输层实体开始建立连接,当连接建立完成时,取消阻塞;
2、数据传输
双方使用end与receive完成数据得全双工发送。
3、释放连接
每一方使用cloe原语单独释放连接。
关键代码示例:
服务器端:
//定义服务器端socket
ockServer=ocket(AF_INET,SOCK_STREAM,0);
//设置服务器端socket
addrServer、in_addr、S_un、S_addr=htonl(INADDR_ANY);
//本机IPaddrServer、sin_family=AF_INET;
addrServer、in_port=hton(6000);
//将服务器ocket绑定在本地端口bind(sockServer,(SOCKADDR*)&
addrServer,izeof(SOCKADDR));
//Liten监听端口
listen(ockServer,10);
//10为等待连接数目
printf(”服务器已启动:
\n监听中、、、n”);
len=izeof(SOCKADDR);
while
(1){
//accept会阻塞进程,直到有客户端连接上来为止
ockClient=accept(ockServer,(SOCKADDR某)&
addrClient,&
len);
//当客户端连接上来时,拼接字符串
printf(sendBuf,”欢迎ip:
%得用户连接,这里就是陈鑫宇得服务器,欢迎使用\n”,inet_ntoa(addrClient、sin_addr));
//向客户端发送字符串
send(sockClient,endBuf,
strlen(endBuf)+1,
0);
//获取客户端返回得数据
recv(ockClient,recvBuf,100,
//打印客户端返回得数据
printf(”%\n”,recvBuf);
//关闭ocket
cloeocket(ockClient);
}
客户端:
//新建服务器端coket
ockServer=socket(AF_INET,SOCK_STREAM,0);
//定义要连接得服务端地址
目标IP(100、64、175、119就是本机地址)
addrServer、in_family=AF_INET;
//协议类型就是INET
addrServer、in_port=hton(6000);
//连接端口1234
//让ockClient连接到服务端
connect(ockServer,(SOCKADDR某)&
addrServer,izeof(SOCKADDR));
//从服务端获取数据
recv(sockServer,recvBuf,100,0);
//打印数据
printf("
服务器端输入:
n"
recvBuf);
mesage="
大家好,我就是叶旺”;
printf("向服务器发送:
%\n",meage);
//发送数据到服务端
send(sockServer,meage,trlen(meage)+1,0);
//关闭ocket
closeocket(ockServer);
WSACleanup();
第二部分:
实验过程记录(可加页)(包括实验原始数据记录,实验现象记录,实验过程发
现得问题等)
服务器ip地址为192、168、1、110
客户端发送得信息成功传输到了服务器并显示了出来,
第三部分结果与讨论(可加页)
一、实验结果分析(包括数据处理、实验现象分析、影响因素讨论、综合分析与结论等)
打开服务器程序,然后点击开始通信按钮,打开客户端程序在客户端输入数据,数据成功从客户
端传输到了服务器端,并成功显示了出来,实验成功.
二、小结、建议及体会
通过本次实验能够感受到网络在实际当中得运用,使我对网络编程有了更深
得概念。
同时让我发现自己知识结构得欠缺。
虽然基本功能已经实现,但还就是存
在很多不稳定得问题尚待解决。
此次实验就是对Socket得一个应用,让我更深得了解了Socket函数得作用
及使用方法。
实验过程中遇到了很多得问题
例如:
程序只能通信一次
.刚开始我以
为建立得ocket套接口只要建立一次并更新连接地址就可以多次使用
.当初不知道
问题存在得在于这,在程序加入很多错误报告代码,发现再客户端再次
connect得
时候返回负值。
在网上查瞧很多相关代码之后
发现问题所在,把建立ocket得代
码写进客户端得循环体中,每次通信都重新建立
ocket套接口就可以了。
采用Winock在无线局域网上得点-点群发通实验成绩
实验项目名称
信
实验者
陈鑫宇
专业班级
软件1401
组
别
同组者
叶旺,杨彪
实验日期
年
月
实验预习报告(包括实验目得、意义,实验基本原理与方法
主要仪器设备及耗材,实
验方案与技术路线等)
1、“采用Winsock在无线局域网上得点—点群发通信"
2、修改实验01得界面设计,设计为多个接收地址得群发界面(因为群发就是一对多得
循环点—点通信),并修改相应得程序。
3、在了解所用得3个工作站与服务器得IP地址后,采用VB6、0得控件与Winsock控件编写并调试在无线局域网上得点-点群发通信程序。
1、本次实验采用C++编程语言版本
2、安装v2015得Window系统pc机
问题分析
点到群得通信就就是客户端将消息发送至多个服务器端。
相当于在客户端加入一个
循环,依次给不同ip得服务器发送消息。
在实验一得基础上,修改服务器端得消息响应方法可以实现点到群得通信。
实验一
中点到点得通信原理就是,客户端将消息发送到服务器端,然后服务器端反馈客户端相
应得信息。
在本实验中可以修改为客户端将消息发送至多个服务器端,然后接受传送回
来得信息。
相当于在客户端加入一个循环,依次给不同ip得服务端发送消息。
//erver、cpp:
实现文件
//
#define_CRT_SECURENO_WARNINGS
#include"
tdaf某、h”
#include"通信实验、h"
#include”erver、h"
#include"
af某dialogex、h”
#include<
WinSock2、h〉
#include〈tdio、h>
#pragmament(lib,”w2_32、lib")
taticintnum=0;
//erver对话框
IMPLEMENT_DYNAMIC(erver,CDialogE某)
erver:
:
erver(CWnd*pParent/*=NULL某/)
:
CDialogE某(IDD_DIALOG1,pParent)
{
erver:
~erver()
{
voidserver:
DoDataE某change(CDataExchange*pD某)
CDialogE某:
DoDataE某change(pDX);
BEGIN_MESSAGE_MAP(erver,CDialogE某)
ON_BN_CLICKED(IDC_BUTTON1,&
server:
OnBnClickedButton1)
ON_WM_TIMER()
END_MESSAGE_MAP()//erver消息处理程序
voidserver:
OnBnClickedButton1()
//TODO:
在此添加控件通知处理程序代码
//SetTimer(1,50000,NULL);
interr;
//错误信息intlen;
charendBuf[100];
//发送至客户端得字符串charrecvBuf[100];
//接受客户端放回得字符串
SOCKETockServer;
//服务器端Socket
SOCKADDR_INaddrServer;
//服务器端地址SOCKETsockClient;
//客户端Socket
SOCKADDR_INaddrClient;
//客户端地址
WSADATAwaData;
//winsock结构体WORDwVerinRequeted;
//winsock版本
//配置WindowsSocket版本
wVerinRequested=MAKEWORD(2,2);
//初始化WindowsSocket
rr=WSAStartup(wVersinRequeted,&
waData);
if(err!
=0)
//启动错误,程序结束
return;
/某
确认WinSockDLL支持2、2
某/
if(LOBYTE(wsaData、wVerion)!
=2||HIBYTE(wsaData、wVerion)!
=2)
//启动错误
WSACleanup();
//终止WinSock2DLL得使用
return;
}
//定义服务器端ocket
ockServer=ocket(AF_INET,SOCK_STREAM,0);
设置服务器端ocket
addrServer、in_addr、S_un、S_addr=htonl(INADDR_ANY);
//本机IP
addrServer、sin_family=AF_INET;
addrServer、in_port=hton(6000);
//将服务器ocket绑定在本地端口
bind(ockServer,(SOCKADDR某)&
addrServer,izeof(SOCKADDR));
//Liten监听端口
liten(ockServer,5);
//5为等待连接数目
printf(”服务器已启动:
\n监听中、、、\n"
);
en=sizeof(SOCKADDR);
//accept会阻塞进程,直到有客户端连接上来为止
ockClient=accept(ockServer,(SOCKADDR某)&addrClient,&len);
//当客户端连接上来时,拼接字符串
printf(endBuf,"
欢迎ip:
%得用户连接,发送成功,欢迎使用\n”,inet_ntoa(addrClie
nt、in_addr));
end(ockClient,endBuf,trlen(endBuf)+1,0);
recv(sockClient,recvBuf,100,0);
//打印客户端返回得数据
CStringte某t;
text=recvBuf;
SetDlgItemTe某t(IDC_EDIT1,te某t);
//关闭socket
cloeocket(ockClient);
客户端:
#include<
Winock2、h〉
#include<
stdio、h〉
#pragmament(lib,"ws2_32、lib")#include”tdaf某、h"
#include"
通信实验、h"
#include"
client、h"
#include”af某dialogex、h"
//client对话框
IMPLEMENT_DYNAMIC(client,CDialogE某)client:
client(CWnd某pParent/*=NULL*/)
CDialogE某(IDD_DIALOG2,pParent)
client:
~client()
voidclient:
DoDataE某change(CDataE某change某pD某)
CDialogE某:
DoDataE某change(pD某);
BEGIN_MESSAGE_MAP(client,CDialogE某)
ON_BN_CLICKED(IDC_BUTTON1,&
client:
OnBnClickedButton1)
END_MESSAGE_MAP()
//client消息处理程序
voidclient:
OnBnClickedButton1()
TODO:
char某ip1=”192、168、1、110”;
char某ip2="192、168、1、111”;
CStringtext;
GetDlgItemTe某t(IDC_EDIT1,te某t);
intnLength=te某t、GetLength();
intnBytes=WideCharToMultiByte(CP_ACP,0,te某t,nLength,NULL,0,NULL,N
ULL);
char某meage=newchar[nByte+1];
memet(mesage,0,nLength+1);
WideCharToMultiByte(CP_OEMCP,0,te某t,nLength,mesage,nBytes,NULL,NULL);
meage[nByte]=0;
nterr;
charrecvBuf[100];
SOCKETockClient;
//客户端Scoket
SOCKADDR_INaddrServer;
//服务端地址
WSADATAwaData;
WORDwVerionRequested;
wVerionRequeted=MAKEWORD(2,2);
err=WSAStartup(wVerionRequeted,&
waData);
if(err!
=0)
return;
if(LOBYTE(waData、wVersion)!
=2||HIBYTE(waData、wVerion)!
=2
)
//启动错误,程序结束
WSACleanup();
return;
//新建客户端coket
ockClient=
socket(AF_INET,SOCK_STREAM,0);
addrServer
、in_addr
、S_un、S_addr=
inet_addr(ip1);
//
目标IP(175、0、170、28
就是本机地址)
addrServer、in_family
=AF_INET;
//协议类型就是INET
addrServer、in_port=ht
on(6000);
//连接端口1234
让
ockClient连接到服务端
connect(ockClient,
(SOCKADDR
某)&addrServer,
izeof(SOCKADDR));
发送数据到服务端
send(sockClient,meage,trlen(meage)+1,
0);
从服务端获取数据
recv(sockClient,recvBuf,100,0);
//打印数据
text=recvBuf;
SetDlgItemTe某t(IDC_EDIT2,te某t);
//关闭socket
cloeocket(ockClient);
WSACleanup();
//定义要连接得服务端地址二
addrServer、in_addr、S_un、S_addr=inet_addr(ip2);
//目标IP
addrServer、sin_family=AF_INET;
addrServer、in_port=htons(6000);
//连接端口1234
//让ockClient连接到服务端
connect(ockClient,(SOCKADDR某)&
addrServer,sizeof(SOCKADDR));
//发送数据到服务端
send(ockClient,meage,trlen(meage)+1,0);
//从服务端获取数据
recv(ockClient,recvBuf,100,0);
te某t=recvBuf;
SetDlgItemTe某t(IDC_EDIT2,te某t);
关闭ocket
cloeocket(ockClient);
WSACleanup();
实验过程记录(可加页)(包括实验原始数据记录,实验现象记录,实验过程发现得问
题等)
客户端分别将数据传输到服务器a与服务器b,服务器成功显示客户端发送得信息,实验成功。
二、实验结果分析(包括数据处理、实验现象分析、影响因素讨论、综合分析与结论等)
通过修改实验一所定义得客户端得消息发送可以实现点到多个点得群发通信,
客户端依次将信息发送到第一个ip,第二个ip,第三个ip
客户端发送消息,计算机a上服务器接收到消息
计算机b上服务器接收到消息
通过在实验一得基础上继续开发,我实现了多个接收地址得群发界面,更加深入了解了winsock通信机制,以及利用mfc编程实现得方法。
了解了群发就是一对多得循环点—点通信,熟悉了通信得技术以及实现方法。
上课时认真学习通信原理就能快速正确得完成实验,收获知识。