套接字接口函数实验报告

上传人:平*** 文档编号:18424765 上传时间:2017-11-14 格式:DOC 页数:12 大小:55.69KB
返回 下载 相关 举报
套接字接口函数实验报告_第1页
第1页 / 共12页
套接字接口函数实验报告_第2页
第2页 / 共12页
套接字接口函数实验报告_第3页
第3页 / 共12页
套接字接口函数实验报告_第4页
第4页 / 共12页
套接字接口函数实验报告_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《套接字接口函数实验报告》由会员分享,可在线阅读,更多相关《套接字接口函数实验报告(12页珍藏版)》请在金锄头文库上搜索。

1、电子科技大学通信学院套接字接口函数实验报告班 级 2011221010 学 生 熊 泽 瞳 刘 炎 宏 学 号 2011221010020(熊 泽 瞳 ) 2011221010010(刘 炎 宏 ) 教 师 段 景 山 2004 年 9 月2套接字接口函数【实验目的】掌握套接字接口函数的正确使用方法了解接口函数使用中可能出现的错误及解决方法【实验环境】单人实验,或两人联网配合实验。【实验原理】见本实验指导书相关内容【实验步骤及记录】注意:本实验测试各种套接字函数时,均使用如下形式判断函数执行是否成功和取得错误码,再通过查阅教材了解错误码的具体含义:retval = xxxx( ); / xxx

2、x( )表示被测试的套接字函数if( retval = = SOCKET_ERROR) /或者 if ( retval != 0)r = WSAGetLastError(); /r 中取得错误码。每次测试完毕后,使用菜单中 debug/stop debug 选项使测试停止下来,如果没有特殊说明,都应把测试对象恢复到测试前的正常状态,以免影响下一个测试内容。 面向连接服务器的各接口函数:socket、bind、listen 、accept、send、recv、closesocket1、socket( )打开例程中面向连接服务器工程1) 测试参数 1。测试目标:使用 AF_ISO,或其它不是 AF

3、_INET 家族的标识,注意:使用单步调试方法取得测试结果。参数 1 的值 AF_ISO ,s 的值: 4294967295 ,r 取得的错误码 10047 ,错误含义 WSAEAFNOSUPPORT 地址家族不支持请求的操作。对套接字类型不支持的操作来说,在试着执行它时,就会出现这个错误。 。32) 测试参数 2。使用非标准套接字类型,如:6。记录错误提示。参数 1 的值 AF_INET ,retval 的值: -1 ,r 取得的错误码 10044 ,错误含义 WSAESOCKTNOSUPPORT 不支持的套接字类型。对指定的地址家族来说,没有相应的具体套接字类型支持。 。3) 测试参数 3

4、。一般情况下,不特别指明使用协议类型时使用 0。现在分别使用不同的协议号测试并记录:参数 2:SOCK_STREAM,参数 3:6retval 的值: 0 ,r 取得的错误码 -858993560 ,错误含义 r 错误码变量是没有初始化,没有错误 。参数 2:SOCK_STREAM,参数 3:7retval 的值: -1 ,r 取得的错误码 10043 ,错误含义 WSAEPROTONOSUPPORT 不支持的协议。系统中没有安装请求的协议或没有相应的实施方案。 。参数 2:SOCK_DGRAM,参数 3:17retval 的值: 0 ,r 取得的错误码 -858993560 ,错误含义 r

5、错误码变量是没有初始化,没有错误 。参数 2:SOCK_DGRAM,参数 3:19retval 的值: -1 ,r 取得的错误码 10043 ,错误含义 WSAEPROTONOSUPPORT 不支持的协议。系统中没有安装请求的协议或没有相应的实施方案。 。结论:socket()函数的三个参数主要用于定义协议家族,套接字类型以及协议类型。如果当前环境不支持相应的类型,则 socket()会返回失败。2、bind( )1) 测试参数 1。测试目标:使用尚未申请套接字资源的套接字描述符,能否绑定套接字地址在 s socket( );一句及相关的错误判断等语句前加 ”/”方式变成注释语句。观察bind

6、 函数执行的结果。retval 的值: -1 ,r 取得的错误码 10038 ,错误含义 WSAENOTSOCK 无效套接字上的套接字操作。 。2) 测试参数 2。测试目标:在套接字地址中分别使用不正确的地址族标识、本地 IP 地址和端口号测试。a、在 local 结构中,sin_family 成员赋值为 AF_OSI,retval 的值: -1 ,r 取得的错误码 10047 ,4错误含义 WSAEAFNOSUPPORT 地址家族不支持请求的操作。对套接字类型不支持的操作来说,在试着执行它时,就会出现这个错误。 。b、在 local 结构中,sin_addr 成员赋值为本计算机的 IP 地址

7、,retval 的值: 0 ,r 取得的错误码 -858993460 ,错误含义 没有错误 。c、在 local 结构中,sin_addr 成员赋值为非本计算机的 IP 地址,如同小组的另一个同学的IP 地址;retval 的值: -1 ,r 取得的错误码 10049 ,错误含义 WSAEADDRNOTAVAIL 不能分配请求的地址。A P I 调用中指定的地址对那个函数来说无效时,就会产生这样的错误。 。d、在 local 结构中,sin_port 成员赋值为 135;retval 的值: 0 ,r 取得的错误码 -858993460 ,错误含义 没有错误 。思考:什么样的端口值会导致出错?

8、。如果试图 bind()已经分配给其他进程的端口则会出错。一般写程序,不用选择 1024 之前的端口。3) 测试参数 3。参数 3:10retval 的值: -1 ,r 取得的错误码 10014 ,错误含义 WSAEFAULT 地址无效。传给 Wi n s o c k 函数的指针地址无效。 参数 3:16retval 的值: 0 ,r 取得的错误码 -858993460 ,错误含义 没有错误 。参数 3:40retval 的值: 0 ,r 取得的错误码 -858993460 ,错误含义 没有错误 。思考:什么样的套接字地址结构大小是不正确的?因为表示地址信息的结构有很多,为了保持兼容,第三个参

9、数的结构大小会用于判断地址结构版本的用途,当给定的地址结构大小不能正常识别出地址信息就会出错吧。bind 函数的测试结论:bind()函数仅仅表示网络编程模型的一个基本操作,不仅仅是 tcpip 使用。因此保证参数的正确能使 bind()正常工作。bind()需要的参数是分配好资源的套接字标识符以及地址信息。3、listen( )1) 测试参数 1。测试目标:使用尚未建立本地半相关的套接字5预测测试结果:(可从 winsock.h 的错误代码列表中找出可能的错误类型,然后再用实验证明。)将 bind()一句及相关判错的语句前面加 “/”方式变成注释语句后测试retval 的值: -1 ,r 取

10、得的错误码 10022 ,错误含义 WSAEINVAL 参数无效。指定了一个无效参数。 。2) 测试参数 2。有文献载明:“windows 套接字实现中最多只允许服务器同时监听 5 个套接字。使用参数 0,则系统将把该参数改为 1,而使用超过 5 的值,系统将自动把该参数改为 5。”使用不同的参数值,测试实际效果,具体步骤如下:a、 设置 listen()第 2 个参数的值b、 单步调试服务器程序,执行到 listen 下一句,即在错误判断语句前c、 在例程目录下有一个 coclient.exe,双击执行,观察客户机与服务器连接的情况。(客户机程序会打印连接结果)d、 同时执行多个 cocli

11、ent(不要关闭已经打印结果的客户机),记录有多少个客户机能同时与服务器连接。设置参数值为 0,有 1 个客户机可同时与服务器连接设置参数值为 1,有 1 个客户机可同时与服务器连接设置参数值为 10,有 5 个客户机可同时与服务器连接思考,如果想结束套接字的监听状态,可以如何处理?closesocket()关闭套接字listen()函数的测试结论:listen()将会为分配好的服务器套接字监听客户端的连接,可以指定等待连接的数量,但是会有限制,但并不是 5.4、accept( )1)测试参数 1目标:能否在没有设置为监听状态的套接字上接受连接将 listen()一句设为注释语句,然后测试re

12、tval 的值: -1 ,r 取得的错误码 10022 ,错误含义 10022 WSAEINVAL 参数无效。 。2)测试参数 2(这是一个输出参数,其作用是告诉使用者远端点地址。)测试目标:如果事先往远端点地址结构(remote )里面填写一个指定的远端点地址,能够限制服务器只接受这个远端点的连接请求。步骤如下a、在调用 accept 之前,给 remote(远端点)的 IP 地址或端口号赋值,注意 IP 地址不指定为同小组另一个同学的地址,或端口号不是本地客户机绑定的端口号(即,联网实验为非6客户机的 IP 地址,单机实验为非客户机的端口号)。注意:本实验的客户机(coclient.exe

13、)端口为 0x4321.b、将服务器单步调试到 accept()阻塞。c、双击例程提供的 coclient.exe,观察是否能够连接服务器。连接是否成功: 能 accept()执行后,remote 内存放的 IP 地址为 127.0.0.1 ,端口号为 8515 。结论:(能否限制连接服务器的客户机地址)不能限制3)测试参数 3参数 3 的作用与 bind()函数参数 3 一致,可同样方法如 0,15,16,40 等值进行测试。accept 函数的测试结论:accept()函数为已经处于监听的服务器套接字选择请求进行处理,返回新的连接的套接字。5、recv( )1)测试参数 1目标:在一个没有建立连接的套接字上尝试接收数据。将 accept 一句改为注释语句,并将 recv()里的套接字标识符改为 s,然后测试:retval 的值: -1 ,r 取得的错误码 10057 ,错误含义 WSAENOTCONN 套接字尚未连接。 。2)测试参数 2这是程序接收数据缓冲区指针,接收缓冲区要求程序设计者事先准备好的空间,即该指针已经指向一块已经向系统申请,确定大小的空间。测试目标:如果不使用指向确定空间的指针,将会出现什么错误。a、在声明接受缓冲区时,使用指针声明而不是字符数组申明。如 ch

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号