欢迎来到天天文库
浏览记录
ID:59416588
大小:201.50 KB
页数:45页
时间:2020-09-19
《Linux程序设计――技术技巧与项目实践---网络编程--第9章ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第九章网络编程9.1SOCKET的概念9.2SOCKET的建立与配置9.3SOCKET的连接建立9.4数据传输9.5SOCKET编程实例9.6PING命令解析9.7实战技巧光驱与软驱的加载方法7/28/202119.1Socket的概念Socket是TCP/IP协议传输层提供的接口或套接字,供用户编程访问网络资源时的工具。Socket接口是TCP/IP网络的API,socket接口定义了许多函数或例程,程序员用它们开发TCP/IP网络上的应用程序。TCP/IP协议(TransmissionControlProtocol/InternetProtocol)是传输控制/网际协议,又
2、叫网络通信协议,这个协议是Internet国际互联网络的基础。要学Internet上的TCP/IP网络编程,必须理解socket接口。Linux的套接口通信模式与日常生活中的电话通信非常类似,套接字代表通信线路中的端点,端点之间通过通信网络来相互联系。Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出,就很容易了解socket。网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用socket(),该函数返回一个整型的socket描述符,随后的连接建立、数据传输等操
3、作都是通过该socket实现的。常用的socket类型有两种:流式socket(SOCK_STREAM)和数据报式socket(SOCK_DGRAM)。流式是一种面向连接的socket,针对于面向连接的TCP服务应用;数据报式socket是一种无连接的socket,对应于无连接的UDP服务应用。7/28/202129.2Socket的建立与配置为了建立socket,程序可以调用socket函数,该函数返回一个类似于文件描述符的句柄。socket函数原型为:intsocket(intdomain,inttype,intprotocol);domain指明所使用的协议族,通常为PF
4、_INET,表示互联网协议族(TCP/IP协议族);type参数指定socket的类型:SOCK_STREAM或SOCK_DGRAM,socket接口还定义了原始socket(SOCK_RAW),允许程序使用底层协议;protocol通常赋值为0。socket()调用返回一个整型socket描述符,可在后面直接使用它。Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用socket函数时,socket执行体将“建立一个socket”,这意味着为一个socket数据结构分配存储空间。Socket执行体用来管理描述符表。两个网络程序之间的一个网络连接包括五种信息
5、:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。Socket数据结构中包含这五种信息。7/28/20213通过socket调用返回一个socket描述符后,在使用socket进行网络传输以前,必须配置该socket。面向连接的socket客户端通过调用connect()函数在socket数据结构中保存本地和远端信息。无连接socket的客户端和服务端以及面向连接socket的服务端通过调用bind()函数来配置本地信息。Bind函数将socket与本机上的一个端口相关联,随后就可以在该端口监听服务请求。Bind函数原型为:intbind(intsockfd,
6、structsockaddr*my_addr,intaddrlen);其中的sockfd是调用socket函数返回的socket描述符,my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针;addrlen常被设置为sizeof(structsockaddr)。structsockaddr结构类型是用来保存socket信息的:structsockaddr{unsignedshortsa_family;/*地址族,AF_xxx*/charsa_data[14];/*14个字节的协议地址*/};sa_family一般为AF_INET,代表Interne
7、t(TCP/IP)地址族;sa_data则包含该socket的IP地址和端口号。7/28/20214另外还有一种结构类型:structsockaddr_in{shortintsin_family;/*地址族*/unsignedshortintsin_port;/*端口号*/structin_addrsin_addr;/*IP地址*/unsignedcharsin_zero[8];/*填充0保持与structsockaddr大小相同*/};这个结构更方便使用。sin_zero用来将sockad
此文档下载收益归作者所有