姓名:陈波
学号:18072621
日期:2010.12.15
一、实验内容:
接受应用程序:创建两个数据报套接口,由 select( )函数监视它们是否有数据可
读。如任何一个套接口,或全部套接口有数据可读,或超时(例:超时时间设置为
10 秒)的时候程序结束。
发送应用程序:分别向接受应用程序中的两个套接口发送数据(发送数据的内容自
由定义)
二、程序实现的步骤:
1、编写接受应用程序 accept.cpp,首先,创建两个数据报套接口 s1、s2,具体代码
为:SOCKET s1,s2;
s1=socket(AF_INET,SOCK_DGRAM,IPPROTO_IP);
s2=socket(AF_INET,SOCK_DGRAM,IPPROTO_IP);
2、定义两个端口 iport1、iport2,端口号分别为 5050、5051,并且定义两个数组
buf1、buf2 用来作为套接口 s1 和 s2 的接收数据缓冲区,并使用 memset()函数
对其进行初始化。
3、使用 sockaddr_in 结构来定义两个结构体 accept1 和 accept2,分别用来指定套
接 口 s1 和 s2 的 IP 地 址 以 及 端 口 信 息 , 绑 定 的 IP 地 址 均 为 回 送 地 址
127.0.0.1。
4、然后,调用 WSAStartup 函数来检查系统中是否有 Windows Sockets 函数,如
果没有就返回错误类型。
5、使用 bind()函数对套接口 s1、s2 进行绑定。
6 、 接 着 , 构 建 一 个 循 环 , 在 循 环 中 , 首 先 初 始 化 要 检 查 的 集 合
(FD_ZERO(&fdread)),然后将要检查的套接口 s1 和 s2 加入到集合中,并
设置等待时间为 6 秒。接着调用 select()函数来检查套接口的可读性、可写性和
例外数据。
7、如果检查到有数据可读或可写,便用 FD_ISSET 检查套接口 s1、s2 是否在集中,
如果在集中,就用 recvfrom()函数接收数据并放入接收缓冲区,并且输出接收的
数据,以及数据接收的端口号;如果在等待时间结束,等待超时的时候,便输出
“Timeout!”并中断程序;如果出错,则调用 WSAGetLastError()函数进行差错。
8、编写发送应用程序 send.cpp,函数实现功能简单,主要是对套接口 s1 和 s2 发
送数据,在发送缓冲区 buf1 和 buf2 中分别放入数据“hello”和“baby”。并使用
sendto()函数进行发送,具体如下:
iSend1=sendto(s,buf1,sizeof(buf1),0,(struct
sockaddr*)&accept1,sizeof(accept1));
iSend2=sendto(s,buf2,sizeof(buf2),0,(struct
sockaddr*)&accept2,sizeof(accept2));
如果发送成功,便显示“第一次 sendto() succeeded!”、“第二次 sendto()
succeeded!”,否则便显示失败信息。
9、最后关闭套接口 s、s1、s2,释放资源。
三、最终运行结果: