当前位置:
文档之家› 《信息通信网络概论》课程实验
《信息通信网络概论》课程实验
();
(("*"));
()
{
();
("\", () ());
}
}
(* ) 注意异常类型
{
[];
>(, );
("! \", );
>();
}
实验二界面样例
返回
实验四:聊天工具
实验目的 实验内容及要求 实验步骤 注意事项
实验目的
在前面两个实验的基础上进一步了解网 络编程的过程。 掌握环境下基于的编程方法和通讯实现。 编写一个聊天程序,即以客户端和服务 器的模式进行互发消息。
实验要求:理解掌握()、()、 ()、()、()、 ()函数 的使用
类、函数表单:
用于建立一个会话对象
()
用于建立连接(使用该函数时要进行
异常处理)
(包括两虚成员函数()和()) 用于建立文件查找类
()
用于下载文件
()
用于上传文件
()
用于查找下一个文件,与 ()配合使
用;
主要步骤:
、创建一个会话( ())
、建立与服务器的连接——对象 如果连接成功,获得当前登陆的缺省目录下所有的文 件和目录名称,即如何检索某一个目录下的文件,并 显示文件信息 、下载文件或上传文件 、关闭连接
举例说明一下一些函数的使用
((“”)); 建立会话
*;
需要进行异常处理
{
建立连接
((""));
创建对象
利用函数()以及()查找并显示所有文件
本地和远地机的地址
本地和远地进程的协议端口
连接所使用的协议
使用发送或接收数据
使用或方法发送数据,或方法接收数据。
使用()函数关闭与 的连接
返回
实验一
实验内容:使用 函数编写一个小程序实现查询
主机地址即输入地址能够给出该地址记对录主应机信的息,域包括主机
名;给出域名可以给出地址。
名、别名、地址类型、
send()
recv()
closesocket()
WSACleanup() 客户端
返回
无连接的网络通信程序工作流程图()
WSAStartup() socket() bind()
recvfrom() sendto()
closesocket() WSACleanup()
服务器
交换数据 交换数据
WSAStartup()
当作为客户端是,要求能输入远地服务器的值和 端口数,并进行连接请求,等待远地服务器的响应, 当连接上后要能与服务器进行互发消息,聊天结束后 还要实现与服务器的断开的功能。
实验步骤()
建立自己的类 使用 中的类作为基类重载虚拟函数建立
自己的类。 : 然后重载函数
()
()
()
() 这些函数系统会在有网络消息的时候自动调 用它们,在下面的实验步骤()中提到要使用 的函数就是在这些重载函数中调用的。(例子) 我们还可以在这些函数中加入自己的代码,实 现自己想要得功能。
《信息通信网络概论》课程实验
网络编程实验
编程基础知识 实验一 实验二、三 实验四 实验五、六
网络编程
简介 套接字编程基础 编程原理 编程步骤
一、 的由来 加利福尼亚大学伯克利分校为系统开发出了伯克利套
接字( ),在此基础上扩展形成了套接字。 规范是一套开放的、支持多协议的 下的网络编程接口,
它规范了协议族(,一般为)的使用. 针对多样的网络协议 统一了操作,简化了编程,使两个
信息,如()类函数,这些函数是对标准函数的扩充。函数()允许用 户终止一个正在执行的异步请求
阻塞处理方法
提供了“钩子函数”负责处理消息,使的消息循环 能够继续。提供了两个函数(()和())让应用程序设置或取消自己 的“钩子函数”。函数()可以检测是否阻塞,函数()可以取消一个 阻塞的调用
错误处理
提供了两个函数()和()来获取和设置最近的错误号
端口号就是这位朋友的名字(依靠这个信息最终 把这封信交付给这位收信者)
字节序
大尾端():字节的高位在内存中放在存储单元的起始位置
00001010 10010111 00001111 10001000 Memory
00001010
A
10010111
A+1
00001111
A+2
小尾端():与大尾端相反
10001000
A+3
网络字节序(, ) 使用统一的字节顺序,避免兼容性问题
主机字节序(, ) 不同的机器是不一样的,这与的设计有关 系列,与是一致的 系列,与不一致 字节排序函数
字节主机字节序转换为网络字节序 字节网络字节序转换为主机字节序 字节主机字节序转换为网络字节序 字节网络字节序转换为主机字节序
实验内容及要求
利用中的类已经集成了的基本函数,我们可以直接使 用其成员函数来建立,初始化并应用,利用客户端和 服务器模式,编写一个点对点的,可以相互发送和接 收消息的程序,也就是常说的聊天工具。
该工具具有既可以作为服务器也可以做为客户端使用。
当作为服务器时要具有能输入自己的值和端口值, 并能进行在线监听是否有客户端要求连接,如果有, 还要能进行适当的响应,也就是接受连接请求建立连 接,并实现消息互发。
注意事项()
消息发送函数 ( * , , ); 在使用这个函数之前要先判断消息发送编辑框是
否有消息,如果是空则不发送,用()函数进行判断,当 不为空的时候返回,否则返回非。当发送函数调用成 功时返回发送数据的长度,否则返回.
消息接受函数( * , , ); 当该函数调用成功时返回接收到的数据的长度,
实验步骤()
使用的函数
服务器端:
•建立:调用 成员函数()函数 •绑定端口:调用成员函数()函数 (注:对于编程我们只要调用()函数就可以包括上面的 两个函数)
• 监听:调用成员函数()函数 • 服务器端接受客户端的连接请求:调用成员函 数() 函数 •结束 连接 :调用成员函数() 客户端:
•建立客户端的 :调用 () 函数 (注:我们也是调用()函数来完成的建立的)
类作为成员变量。因为当作为服务器时要有两 个套接字。一个用于侦听连接请求,一个用于 被连接到另一个应用程序。当然作为客户机时 只要一个套接字就可以了。 界面例子
注意事项() 两个函数
( * );这个函数中调用在你的 程序退出的时候自动调用
创建工程时别忘了 ()函数 中调用这个函数来初始化
( , , , ); 当有网络事件发生 时系统会通知窗口并调用对应的函 数。我们要做的就是重载这些回调 函数,加入我们要的指令实现我们 要的功能。
socket() bind()
这个可以是 隐式的。
sendto()
recvfrom()
closesocket()
WSACleanup() 客户端
返回
注意事项:
无连接的数据报传输过程中,作为服务器的 一方必须先启动 通信的一方可以不用()绑定地址和端口,由 系统分配 不绑定地址和端口号的一方必须首先向绑定 地址的一方发送数据 无连接客户端一般不调用(),在数据发送前 客户与服务器各自通过()和()建立了半相关 ,发送数据时除指定本地套接口的地址外, 还需要指定接收方套接口地址,从而在数据 收发过程中动态建立全连接
返回
为了支持的消息驱动机制,和套接口相比有以下一些扩 充:
异步选择机制
异步相比异步与选同择步函提数高()允了许性应能用更程序具提优名势一,个不或多需个要感兴 趣的网在络接事收件完,一如、个、网、络等事代件表完的网后络等事待件其处理完成, 异步请而求可函以数继异续步接请收求函其数他允网许络应事用程件序。用C异A步sy方nc式So获c得ke请t 求的
( );
函数说明:
① 是应用程序对 版本要求。高字节代表次版本 号,低字节代表主版本号。如定义=,则表示 应用程序对的最低要求为版本
②用于返回 的一些技术细节,是指向结构的一 个指针。其中的成员变量指明支持的最高版本, 成员变量代表与的最小值,也就是希望用户使 用的版本号
③ 函数调用成功,返回值;若失败,则返回错误 码,可用()查看
否则返回。我们可以事先分配一个大小为的数组用来 缓存接收数据,当接收成功后要在这个数组最后加上, 即字符串的结束符,并将之转化为字符串类型,然后 就可以使之在列表框中显示了。
注意事项()
实现控件的禁用和启用函数(),这个函数在我们这个实 验中经常用到,使用这个函数我们就可以实现当程序 在某种状态下禁止一些不相关的控件的使用,这样就 可以避免用户的一些不必要的误操作。
WSAStartup() socket() bind() listen()
等待客户连接请求的到来 accept() recv() send()
closesocket() WSACleanup()
服务器端
三次握手过程建立TCP连接
WSAStartup() socket() connect()
交换数据 交换数据 关闭TCP连接
• 提出连接申请 :调用成员函数()函数
以上这些函数我们是在重载前面的虚拟函数时使用的, 例如()函数中调用() 函数等等。
实验步骤()
制作界面对话框类 使用的控件: ,用于显示已发出和已接收的消息。 ( ),用于模式选择,客户机或服务器。 ,用于输入和端口。 ,控制命令按钮。 注意:要在对话框类中添加两个我们自己的
端口号
为了区分一台主机接收到的数据包应该递交 给哪个进程来进行处理,使用端口号 端口号与端口号独立 端口号一般由 ( ) 管理 众所周知端口:,之间为大部分众所周知端 口,端口通常由占用 注册端口: 动态或私有端口:
比喻:
如果把数据包的投递过程看成是给远方的一位朋 友寄一封信,那么