ImageVerifierCode 换一换
格式:DOCX , 页数:6 ,大小:41.03KB ,
资源ID:168687      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/168687.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机网络socket编程实验报告.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算机网络socket编程实验报告.docx

1、Socket编程实验报告2009301610156 翟宁一、程序代码(1)服务器端include include pragma comment(lib, ws2_32. lib)void main ()( WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup ( wVersionRequested, &wsaData );if ( err != 0 ) return; if ( LOBYTE ( wsaData. wVersion ) != 1 |

2、 |HIBYTE( wsaData. wVersion ) != 1 ) WSACleanup( );return; SOCKET sockSrv=socket(AF_INET, SOCK_STREAM, 0);SOCKADDRIN addrSrv;addrSrv. sin_addr. S_un. S_addr=htonl(INADDR_ANY);addrSrv. sin_family=AF_INET;addrSrv. sin_port=htons(6000);bind (sockSrv, (SOCKADDR*) &addrSrv, sizeof (SOCKADDR) ;/ 绑定端口liste

3、n(sockSrv, SOMAXCONN) ; /SOMAXCONN 由系统确定请求数SOCKADDR_IN addrClient;/连接上的客户端ip地址int len=sizeof(SOCKADDR);while (1)(SOCKET sockConn=accept (sockSrv, (SOCKADDR*)feaddrClient, &len);/接受客户端连接,获取客户端的ip地址char sendBuf50;sprintf(sendBuf,Welcome %s tohere!,z, inet_ntoa(addrClient. sin_addr) ;/ 组合消息发送出去send(soc

4、kConn, sendBuf, strlen(sendBuf) +1, 0) ; / 发送消息到客户端char recvBuf 50 ; recv(sockConn, recvBuf, 50, 0) ;/ 接受客户端消息printf(sn,recvBuf);closesocket (sockConn);WSACleanup() ;/断开连接)(2)客户端代码include include pragma comment(lib, ws2_32. lib)void main ()WORD wVersionRequested;WSADATA wsaData;/WSAata用来存储系统传回的关于Win

5、Socket的资料。int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup ( wVersionRequested, &wsaData );if ( err != 0 )return;if ( LOBYTE( wsaData. wVersion ) ! = 1 | |HIBYTE( wsaData. wVersion ) != 1 ) WSACleanup();return;)SOCKET sockClient二socket(AF_INET, SOCK_STREAM, 0);/ AF_INET . . tcp连接,初始化连接与

6、端口号SOCKADDRIN addrSrv;addrSrv. sin_addr. S_un. S_addr=inet_addr (/z 127. 0. 0. 1);/本机地址,服务器在本机开启addrSrv. sin_family=AF_INET;addrSrv. sin_port=htons (6000) ; / 设置端口号connect (sockClient, (SOCKADDR*)feaddrSrv, sizeof (SOCKADDR) ;/连接服务器 char recvBuf 50;recv (sockClient, recvBuf, 50, 0) ;/接受数据printf(sn,r

7、ecvBuf);send(sockClient, hello”, strlen(hello)+1, 0) ;/发送数据closesocket (sockClient) ;/关闭连接WSACleanup ();二、运行结果:三、主要结构体、命令、函数声明及作用对于一些主要的类、函数代码,主要通过百度逐步了解它们的功能。以服务器端 代码为例,每一段代码作用大致如下:首先声明一个WORD变量,WSADATA这个结构被用来存储 被WSAStartup函数调 用后返回的Windows Sockets数据。它包含Winsock, dll执行的数据。为了在应用程序当中调用任何一个Winsock API函数,

8、首先第一件事情就是必须通 过WSAStartup函数完成对Winsock服务的初始化,因此需要调用WSAStartup函数。 该函数的第一个参数指明程序请求使用的Socket版本,其中高位字节指明副版本、 低位字节指明主版本;操作系统利用第二个参数返回请求的Socket的版本信息。 wVersion是Windows Sockets DLL期望调用者使用的Windows Sockets规范的版本。 高位字节存储副版本号,低位字节存储主版本号,可以用WORD MAKEWORD (BYTE, BYTE ) 返回这个值,例如:MAKEWORD(1, 1)。MAKEWORE(1, 1)和 MAKEWOR

9、D(2, 2)的区别在于,前 者只能一次接收一次,不能马上发送,而后者能。SOCKET socket ( int af, int type, int protocol );应用程序调用socket函数来创建一个能够进行网络通信的套接字。第一个参数指定应用程序使用的通信协议的协议族,对于TCP/IP协议族,该参 数置 AF_INET;第二个参数指定要创建的套接字类型,流套接字类型为SOCK_STREAM、数据报套 接字类型为SOCK_DGRAM、原始套接字S0CK_RAW(WinSock接口并不适用某种特定的协 议去封装它,而是由程序自行处理数据报以及协议首部);第三个参数指定应用程序所使用的通

10、信协议。SOCKADDR_IN 数据结构用做 bind、connect、recvfrom、sendto 等函数的参数, 指明地址信息。但一般编程中并不直接针对此数据结构操作,而是使用另一个与 sockaddr等价的数据结构。sockaddr in和sockaddr是并列的结构,指向 sockaddr in的结构体的指针也可以指向sockaddr的结构体,并代替它。也就是说, 可以使用sockaddr_in建立所需要的信息,然后用进行类型转换就可以了htonlO将主机的无符号长整形数转换成网络字节顺序。函数返回一个网络字节顺 序的值。INADDR_ANY是指定地址为0.0.0.0的地址,这个地址

11、事实上表示不确定地址,或所 有地址”、任意地址”。一般来说,在各个系统中均定义成为。值。htons ()将一个无符号短整型数值转换为网络字节序,即大端模式(big-endian) 返回值为TCP / IP网络字节顺序.bind的函数声明int PASCAL FAR bind( SOCKET s, const struct sockaddr FAR* name,s:标识一未捆绑套接口的描述字。name:赋予套接口的地址。sockaddr结构定义如下:struct sockaddr(ushort safamily;char sa_data14 :; namelen: name 名字的长度。将一本地

12、地址与一套接口捆绑。本函数适用于未连接的数据报或流类套接口,在 connect()或listen。调用前使用。当用socket()创建套接口后,它便存在于一个名字空 间(地址族)中,但并未赋名。bind()函数通过给一个未命名套接口分配一个本地名 字来为套接口建立本地捆绑(主机地址/端口号)。listen在套接字函数中表示让一个套接字处于监听到来的连接请求的状态,它的 功能是把一个本地地址与套接字关联。参数s是一个已绑定未被连接的套接字描述符;backlog是连接请求队列(queue of pending connections)的最大长度(一般由2到4)。用SOMAXCONN则由系统确定。A

13、ccept ()将从连接请求队列中获得连接信息,创建新的套接字,并返回该套 接字的文件描述符。新创建的套接字用于服务器与客户机的通信,而原来的套接字仍 然处于监听状态。函数声明 int acceptfint sockfd, void *addr, int *addrlen);参数 sockfd 监听的套接字描述符;addr:指向结构体sockaddr的指针;addrlen: addr参数指向 的内存空间的长度。Sprintf ()将字串格式化命令。sprintf是个变参函数,格式要注意,否则会引起程序 崩溃inet_ntoa ()本函数将一个用in参数所表示的Internet地址结构转换成以间

14、隔的诸如a.b.c.d” 的字符串形式。请注意inet_ntoa()返回的字符串存放在WINDOWS套接口实现所分配 的内存中。应用程序不应假设该内存是如何分配的。在同一个线程的下一个WINDOWS 套接口调用前,数据将保证是有效。Send () 函数声明:ssize_t send ( int s , const void *msg , size_t len , int flags);第一个 参数指定发送端套接字描述符;第二个参数指明一个存放应用程式要发送数据的缓 冲区;第三个参数指明实际要发送的数据的字节数;第四个参数一般置0。Recv()函数从一个套接 口接收数据。int PASCAL F

15、AR recv( SOCKET s, char FAR* buf, int len, int flags);参数s: 一个标识己连接套接口的描述字;buf:用于接收数据的缓冲 区;len:缓冲区长度;flags:指定调用方式。四、实验心得总结刚开始对于socket编程完全不了解,出于畏惧心理,本来想就此罢休,写一篇论 文就行。不过周围的同学很热心的帮助了我,给我了一些socket编程的参考资料, 上面的讲解很清楚,再加上我对这个很好奇,也想体验一下,所以才有了接下去的工 作。在网络编程中最常用的方案便是Client/Server (客户机/服务器)模型。在这种方 案中客户应用程序向服务器程序请求服务。一个服务程序通常在一个众所周知的地址 监听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户向这个服 务的地址提出了连接请求。在这个时刻,服务程序被惊醒”并且为客户提供服务一对 客户的请求作出适当的反应。现在的Wins

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1