欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年2022年计算机网络实验-网络编程 .pdf

    • 资源ID:27238299       资源大小:672.09KB        全文页数:8页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年2022年计算机网络实验-网络编程 .pdf

    实验七网络编程一、实验目的1.了解套接字 (socket)的概念2.熟悉利用 winsock 在 Windows 下进行网络编程的基本方法二、实验设备1.交换机 1 台2.PC 机 12台3.VC+6.0 软件三、预备知识1.Socket简介Socket通常也称作 套接字 ,最初应用在 UNIX 上,并很快成为 UNIX 上最流行的网络编程接口之一。后来微软将它引入到WINDOWS 中,称为Winsock。2.TCP/IP 协议与 WinSock 网络编程接口的关系WinSock 是对 TCP/IP 协议的一种封装,可通过调用WinSock 的接口函数来调用 TCP/IP 的各种功能。例如用TCP/IP 协议发送数据,可以使用WinSock 的接口函数 Send()来调用 TCP/IP 的发送数据功能,至于具体怎么发送数据,WinSock 已经封装好了这种功能。3.WinSock 编程简单流程WinSock编程分为服务器端和客户端两部分,服务器端的大体流程如下:1)初始化 WinSock DLL库int WSAStarup( WORD wVersionRequested,LPWSADATA lpWsAData ) wVersionRequested: WinSock 的版本,LPWSADATA:指向 WSDATA结构的指针。调用这个接口函数可以初始化WinSock 。2)创建套接字 (Socket) SOCKET Socket(int af,int type,int protocol) af: 协议簇,对于 TCP/IP,为 AF_INET ;type:Socket类型, TCP为 SOCK_STREAM,UDP 则为 SOCK_DRGAM;protocol :通信协议,默认为0,即 TCP/IP 协议。套接字是 WinSock通信的核心, WinSock通信的所有数据传输,都是通过套接字来完成的。套接字包含了两个信息:一个是IP 地址,一个是 Port 端口号,使用这两个信息,就可以确定网络中的任何一个通信节点。3)通过绑定函数把套接字与目的地址建立联系。int bind(SOCKET s,const struct sockaddr FAR* name,int namelen) ; * name:指向类型为 struct sockaddr 套接字地址结构的指针,namelen:name的长度。通常套接字地址结构定义如下:struct sockaddr_in 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - short sin_family ; u_short sin_prot ; struct in_addr sin_addr ; char sin_sero8 ; 此结构包含了需要建立连接的本地的地址,包括地址族、IP 和端口等信息。sin_family字段必须把它设为AF_INET ,这是告诉 WinSock使用的是 IP 地址族。 sin_prot就是要用来通讯的端口号。sin_addr 就是要用来通讯的 IP 地址信息。另外还要注意“ big - endian”和“little- endian”的概念。因为各种不同的 计 算 机 处 理 数 据 时 的 方 法 是 不 一 样 的 。 Intel X86 处 理 器 上 是 用little-endian形式来处理多字节数据,即先处理(读、写)的为数据的低位字节,后处理的为数据的高位字节;而Motorola的 PowerPC 系列 CPU使用big-endian ,处理顺序正好相反。例如,从内存地址0 x0000 开始有以下数据:0 x0000 0 x12 0 x0001 0 x34 0 x0002 0 xab 0 x0003 0 xcd 如 果 我 们 去 读 取 一 个 地 址为 0 x0000 的 四 个 字节 变 量 ,若 字 节 序为big-endian ,则读出结果为0 x1234abcd;若字节序位 little-endian,则读出结果为 0 xcdab3412。如果我们将 0 x1234abcd写入到以 0 x0000开始的内存中,则结果为 big-endian little-endian 0 x0000 0 x12 0 xcd 0 x0001 0 x23 0 xab 0 x0002 0 xab 0 x34 0 x0003 0 xcd 0 x12 互联网标准采用big-endian ,所以进行网络传输时必须把主机字节转换成网络字节的顺序。 WinSock API 提供了几个转化函数。把主机字节转化成网络字节的函数:u_long htonl(u_long hostlong); u_short htons(u_short hostshort); 把网络字节转化成主机字节的函数:u_long ntohl(u_long netlong); u_short ntohs(u_short netshort) ; 这样,设置 IP 地址和 port 端口时,就必须把主机字节转化成网络字节后,才能用 Bind() 函数来绑定套接字和地址。4)当绑定完成之后,服务器端必须建立一个监听队列来接收客户端的连接请求。int listen(SOCKET s,int backlog); backlog: 正在等待连接的最大队列长度这个函数可以把套接字转成监听模式。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - 5)接受客户端的请求int accept(SOCKET s,struct sockaddr FAR* addr,int FAR* addrlen); 以上已经完成了一个服务器的建立。客户端的建立的流程则是初始化WinSock,然后创建Socket 套接字,再 使 用 int connect(SOCKET s,const struct sockaddr FAR* name,int namelen); 来连接服务端。4.创建服务器端和客户端的实例:1)服务器端的创建:WSADATA wsd; SOCKET sListen; SOCKET sclient; UINT port = 800; int iAddrSize; struct sockaddr_in local , client; WSAStartup( 0 x11 , &wsd ); sListen = Socket ( AF_INET , SOCK_STREAM , IPPOTO_IP ); local.sin_family = AF_INET; local.sin_addr = htonl( INADDR_ANY ); local.sin_port = htons( port ); bind( sListen , (struct sockaddr*)&local , sizeof( local ) ); listen( sListen , 5 ); sClient = accept( sListen , (struct sockaddr*)&client , &iAddrSize ); 2)客户端的创建:WSADATA wsd; SOCKET sClient; UINT port = 800; char szIp = 127.0.0.1; int iAddrSize; struct sockaddr_in server; WSAStartup( 0 x11 , &wsd ); sClient = Socket ( AF_INET , SOCK_STREAM , IPPOTO_IP ); server.sin_family = AF_INET; server.sin_addr = inet_addr( szIp ); server.sin_port = htons( port ); connect( sClient , (struct sockaddr*)&server , sizeof( server ) ); 3)当服务器端和客户端建立连接以后,无论是客户端,还是服务器端都可以使用int send( SOCKET s,const char FAR* buf,int len,int flags); int recv( SOCKET s,char FAR* buf,int len,int flags); 函数来接收和发送数据,因为,TCP连接是双向的。4)当要关闭通讯连结的时候,任何一方都可以调用int shutdown(SOCKET s,int how);来 关 闭 套 接 字 的 指 定 功 能 , 再 调 用int closeSocket(SOCKET s) ; 来关闭套接字句柄,这样一个通讯过程就算完名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - 成了。四、实验内容1启动 VC+6.0,创建文件 server.c ,代码按下图输入,2在 VC+6.0 中创建文件 client.c,代码按下图输入,3分析上面程序,简单写出server,c和 client.c 的功能;编译两个程序并观察名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 8 页 - - - - - - - - - 运行结果。思考题:4修改原程序,使服务器端能循环接收客户端的信息,并将每次返回客户端的信息改为 “Hello Client!”名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - 5将实验步骤 1、2 移植到 Linux 平台下,实现相似的功能。Server.c #include #include #include #include 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - int main(void) int socket_descriptor; socket_descriptor = socket(AF_INET, SOCK_STREAM, 0); int count; int port = 8000; struct sockaddr_in sin; int temp_socket_descriptor; char rebuff1024; sin.sin_family = AF_INET; sin.sin_port = htons(5566); sin.sin_addr.s_addr = inet_addr(127.0.0.1); bind(socket_descriptor,(struct sockaddr *)&sin, sizeof(sin) ); listen(socket_descriptor, 128); count = recv(socket_descriptor, rebuff, 100, 0); printf(rebuff); send(socket_descriptor,rebuff,sizeof(rebuff),0); close(socket_descriptor); return 0; Client.c #include #include #include #include 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - int main(void) char buff30 = hello servern; char rebuff30 = hello clientn; struct hostent * server_host_name; server_host_name = gethostbyname(host_name); int socket_descriptor; int count; struct sockaddr_in pin; pin.sin_family = AF_INET; pin.sin_addr.s_addr = inet_addr(127.0.0.1); pin.sin_port = htons(5566); socket_descriptor = socket(AF_INET, SOCK_STREAM, 0); connect(socket_descriptor, (void *)&pin, sizeof(pin); send(socket_descriptor,buff,sizeof(buff),0); count = recv(socket_descriptor, rebuff, 100, 0); printf(rebuff); close(socket_descriptor); return 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -

    注意事项

    本文(2022年2022年计算机网络实验-网络编程 .pdf)为本站会员(Che****ry)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开