- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验一面向连接的套接字编程
实验一 面向连接的套接字编程
一.实验目的
掌握套接字概念;套接字的特点及类型;流式套接字的工作过程及实现。
了解基于TCP的流式套接字的程序设计流程;
完成客户端及服务器端程序设计。
二.实验平台
Linux redhat操作系统
三.实验内容
编写 linux下TCP通信的程序
四.参考资料
1、Linux基础教程.吴学毅.北京交通大学出版社出版日期:2005 年9月
2、红帽企业Linux 4 X86-64体系安装指南
3、Red Hat Enterprise Linux 4 SystemAdministration Guide
4、TCP/IP详解
5、Linux 中TCP/IP 协议实现及嵌入式应用.张曦煌,北京航空航天大学
出版社.出版时间:2008L
五.实验原理
网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端。在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序。被动的等待外面的程序来和自己通讯的程序称为服务端程序。
在网络应用中通信的两个进程间相互作用的主要模式是客户端/服务器模式(C/S模式),即客户向服务器发出请求,服务器接收到请求后提供相应的服务。C/S 模式工作时要求有一套为客户机和服务器所共识的协议,在协议中有主从机之分。当服务器和应用程序需要和其它进程通信时就会创建套接口(socket),socket 主要完成配套接口和初始化、完成连接的系统调用、传送数据以及关闭接口等工作。TCP(Transfer ControlProtocol)传输控制协议是一种面向连接的协议,当我们的网络程序使用这个协议的时候,网络可以保证我们的客户端和服务端的连接是可靠的、安全的。
Linux系统是通过提供套接字(socket)来进行网络编程的,网络程序通过socket和其它几个函数的调用,会返回一个通讯的文件描述符,我们可以将这个描述符看成普通的文件的描述符来操作我们可以通过向描述符读写操作实现网络之间的数据交流。
一、什么是socket
socket,即套接字是一种通信机制,凭借这种机制,客户/服务器(即要进行通信的进程)系统的开发工作既可以在本地单机上进行,也可以跨网络进行。也就是说它可以让不在同一台计算机但通过网络连接计算机上的进程进行通信。也因为这样,套接字明确地将客户端和服务器区分开来。
二、套接字的属性
套接字的特性由3个属性确定,它们分别是:域、类型和协议。
1、套接字的域
它指定套接字通信中使用的网络介质,最常见的套接字域是AF_INET,它指的是Internet网络。当客户使用套接字进行跨网络的连接时,它就需要用到服务器计算机的IP地址和端口来指定一台联网机器上的某个特定服务,所以在使用socket作为通信的终点,服务器应用程序必须在开始通信之前绑定一个端口,服务器在指定的端口等待客户的连接。另一个域AF_UNIX表示UNIX文件系统,它就是文件输入/输出,而它的地址就是文件名。
2、套接字类型
因特网提供了两种通信机制:流(stream)和数据报(datagram),因而套接字的类型也就分为流套接字和数据报套接字。这里主要讲流套接字。
流套接字由类型SOCK_STREAM指定,它们是在AF_INET域中通过TCP/IP连接实现,同时也是AF_UNIX中常用的套接字类型。流套接字提供的是一个有序、可靠、双向字节流的连接,因此发送的数据可以确保不会丢失、重复或乱序到达,而且它还有一定的出错后重新发送的机制。
与流套接字相对的是由类型SOCK_DGRAM指定的数据报套接字,它不需要建立连接和维持一个连接,它们在AF_INET中通常是通过UDP/IP协议实现的。它对可以发送的数据的长度有限制,数据报作为一个单独的网络消息被传输,它可能会丢失、复制或错乱到达,UDP不是一个可靠的协议,但是它的速度比较高,因为它并一需要总是要建立和维持一个连接。
3、套接字协议
只要底层的传输机制允许不止一个协议来提供要求的套接字类型,我们就可以为套接字选择一个特定的协议。通常只需要使用默认值。
三、套接字地址
每个套接字都有其自己的地址格式,对于AF_UNIX域套接字来说,它的地址由结构sockaddr_un来描述,该结构定义在头文件sys/un.h中,它的定义如下:
struct?sockaddr_un{??
????sa_family_t?sun_family;//AF_UNIX,它是一个短整型??
????char????????sum_path[];//路径名??
};??
struct?sockaddr_in{??
????short?int????????????sin_family;//AF_INET??
????unsig
文档评论(0)