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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

网络实验socket编程报告孙斌网工2.docx

1、网络实验socket编程报告孙斌网工2题目:基于socket编程实验通信功能学 院 计算机科学与技术 学科门类 工学 专 业 计算机网络工程 学 号 2012* 姓 名 孙斌 指导教师 蔡老师 20014年12月4日目 录一、实验目的2二、实验原理2三、实验要求2四、Socket编程基础知识2五、基于C#面向连接的socket编程模型2六、实验步骤结果及分析2七、实验总结2一、实验目的通过本实验熟悉和掌握socket编程的基本理论和方法。掌握给予TCP的工作原理以及socket编程的一般方法,能够编写简单的点对点网络聊天应用程序。二、实验原理在Visual Studio2005的运行环境下,用

2、c#语言编写,socket套接字可实现网络的连接和数据在两台电脑间的相互传输。运用相应的包可实现字体和颜色的改变。利用线程对程序进行控制。并行多线程阻塞自己进行监听收到连接请求未接受图1:原理图 C TO C直接连接 . . . .三、实验要求可进行点对点的聊天,可通过使用socket套接字进行两台电脑的连接与数据传输。四、Sockets编程基础知识1网络编程就是通过计算机网络与其他程序进行通信的程序,Socket编程是网络编程的主流工具。Socket API是实现进程间通信的一种编程设施,也是一种为进程间提供底层抽象的机制。尽管应用开发人员很少需要在该层编写代码,但是理解socket API

3、还是非常重要的。主要有两点原因:第一,高层设施是构建于socket API之上的,它们是利用socket API提供的操作来实现。第二,对于响应时间要求较高或运行于有限资源平台上的应用,甚至socket API是唯一可用的进程间通信设施。socket API出现于20世纪80年代早期,作为Berkeley Unix(BSD 4.2)操作系统程序库来通过进程间通信功能。现在主流操作系统都提供socket API。在基于Unix系统中,如BSD、Linux系统,socket API是操作系统内核的一部分;在MS-DOS、Windows OS、OS/2等操作系统中,socket API是以程序库形式

4、提供的,如在Windows系统中,socket API被称为Winsock。Socket接口规范可以适用多种通讯协议,主要是TCP/IP。TCP/IP是计算机互联最常适用的网络通讯协议,TCP/IP的核心部分由网络操作系统的内核实现,应用程序通过编程接口来访问TCP/IP,应用程序通讯的方式有图1-1所示。TCP/IP使用一个网络地址和一个服务端口号来惟一地标识设备。网络地址标识网络上的特定设备;端口号标识要连接到的该设备上的特定服务。网络通讯的基本模式如下:每一台通讯的主机都有一个本网络环境中惟一的IP地址,一台主机上往往有多个通讯程序存在,每个这样的程序都要占用一个通讯端口。因此,一个IP

5、地址,一个通讯端口,就能确定一个通讯程序的位置。图2应用程序通信方式五、基于C#面向连接的Socket编程模型2TCP协议是面向连接协议,它提供了一系列的数据纠错功能,可以保证在网络上传输的数据及时、无误的传给接收方。因此面向连接协议的Socket编程模型应用最为广泛,基于连接协议的服务是设计客户端/服务器应用程序时的标准。编程模型如图3-4所示。模型中,服务器端的处理:(1)使用socket系统调用,生成一个TCP协议模块与应用程序之间进行通信的套接字;使用bind系统调用指定端口号;(2)使用bind系统调用指定端口号;(3)使用listen系统调用,指定连接接收队列的长度,并等待来自客户

6、端的连接请求。前三步完成了启动服务器程序的工作。一旦listen监听到有客户端的连接,就调用accept接收连接。希望与服务器通信的进程称为客户,客户所运行的计算机环境称为客户端,有时两个概念混用。客户端的处理:(1)使用socket系统调用,打开TCP协议模块与应用程序之间的通信线路;(2)使用connect系统调用,指定IP地址和端口号,和服务器相应的服务应用程序建立TCP协议的连接请求;客户端和服务器程序在建立连接后,使用send和recv调用完成数据的发送和接收工作。等待数据传送结束后,各自调用close关闭套接字。使用TCP协议的Socket通信程序包括服务程序和客户程序。图3:基于

7、C#面向连接的socket编程模型基于C#的Socket编程相关函数和数据类型1socket()函数该函数用于根据指定的地址族、数据类型和协议来分配一个套接字的描述字及其所用的资源。Socket函数原型为:Int socket( int domain , int type , int protocol ) ;、参数domain指定地址描述,一般为AP_INET;b、参数type指定socket类型:SOCK_STREAM和SOCK_DGRAM;c、参数protocol通常为0;d、函数返回值为一个整型socket描述符,在bind函数中调用。2bind()函数该函数用于将一个本地地址与一个套接

8、字绑定在一起。 int bind( intsockfd , structsockadd* my_addr , intaddrlen) ;、sockfd:socket描述符,使用socket函数返回值,将该socket与本机上的一个端口相关联。在设计服务器端程序是需要调用bind函数,以在该端口上监听服务请求;而客户端一般不需要调用bind函数,因为只需知道服务器IP地址,并不关心客户通过哪个端口与服务器建立连接,内核会自动选择一个未被占用的端口供客户端来使用。、my_addr:指向包含本机IP地址及端口号等信息的sockaddr类型的指针。、addrlen:sizeof( structsock

9、addr)的值。、bind函数返回值:为-1表示遇到错误,并且errno中包含相应的错误码。3connect()函数与远程服务器建立一个TCP连接。int connect(intsockfd, structsockaddr* serv_addr, intaddrlen);、sockfd:目的服务器的socket描述符。、serv_addr:指向包含目的服务器的IP地址及端口号的指针。、addrlen:sizeof( structsockaddr)的值。、connect函数返回值:为-1表示遇到错误,并且errno中包含相应的错误码,进行服务器端程序设计时不需调用connect函数。4liste

10、n()函数在服务器端程序中,当socket与某一端口绑定后,需要监听该端口,及时处理到达该端口上的服务请求。int listen(intsockfd, int backlog);、sockfd:Socket系统调用返回的socket描述符。、backlog:指定在请求队列中允许的最大请求数,进入的连接请求将在队列中等待接收backlog限制了队列中等待服务的请求数目,系统缺省值为20。、listen函数返回值:为-1表示遇到错误,并且errno中包含相应的错误码。5accept()函数当某个客户端试图与服务器监听的端口连接时,该连接请求将排队等待服务器用accept接收它并为其建立一个连接。i

11、ntaccept(intsockfd, structsockaddr*addr, int*addrlen);、sockfd:被监听的socket描述符。、addr:sockaddr类型的指针变量,用来存放提出连接请求服务的主机信息。、accept函数返回值:为-1表示遇到错误,并且errno中包含相应的错误码,如果没有错误,accept()函数返回一个新想socket描述符,供这个新连接来实用,而服务器可以继续在以前的socket上监听,同时可以在新的socket描述符上进行数据发送和数据接收(sent()和recv()操作)。6send()和recv()函数用于在面向连接(TCP)的sock

12、et上进行数据传输。Send()原型:int send(intsockfd, const void* msg, intlen, int flags) ;、sockfd:用于传输数据的socket描述符。、msg:是一个指向要发送数据的指针。、len:以字节为单位的数据的长度。、flags:一般情况下置为0。、函数返回值:为-1表示遇到错误,并且errno中包含相应的错误码,否则返回所发送数据的总数,该数字可能小于len中所规定的大小。recv()函数原型: intrecv(intsockfd, void* buf, intlen, unsigned int flags);、sockfd:是接收

13、数据的socket描述符。、buf:是存放接收数据的缓冲区。、len:以字节为单位的缓冲区的长度。、flags:一般情况下置为0。、函数返回值:为-1表示遇到错误,并且errno中包含相应的错误码,无错则返回读入的字节数,如果连接被中止,返回0。7endto()和recvfrom()函数这两个函数是利用数据报方式(UDP)进行数据传输。在无连接的数据报socket方式下,由于本地socket并没有与远程机器建立连接,所以在发送数据时应指明目的地址。sendto()原型:intsendto(intsockfd, const void* msg, intlen, unsigned int flag

14、s, conststructsockaddr* to, inttolen);、sockfd:用于传输数据的socket描述符。、msg:是一个指向要发送数据的指针。、len:以字节为单位的数据的长度。、flags:一般情况下置为0。、函数返回值:为-1表示遇到错误,并且errno中包含相应的错误码,否则返回所发送数据的总数,该数字可能小于len中所规定的大小。f、表示目的机器的IP地址和端口号。g、tolen:被赋值为sizeof(structsockaddr)。recvfrom函数原型:intrecv(intsockfd, void* buf, int len, unsigned int f

15、lags, structsockaddr* from, intfromlen);、sockfd:是接收数据的socket描述符。、buf:是存放接收数据的缓冲区。、len:以字节为单位的缓冲区的长度。、flags:一般情况下置为0。、函数返回值:为-1表示遇到错误,并且errno中包含相应的错误码,无错则返回读入的字节数,如果连接被中止,返回0。f、from:保存源机器的IP地址和端口号。g、fromlen:常被赋值为sizeof(structsockaddr)。当对于数据报socket调用了connect()函数时,也可以用send()和recv()进行数据传输,但该socket仍然是数据报socket,并利用传输层的UDP服务

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

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