您好,欢迎访问三七文档
网络编程1.socket简介2.UDP套接字3.TCP套接字4.网络高级编程1.socket简介什么是socket套接字是网络通信中应用程序对应的进程和网络协议之间的接口。是属于传输层的部分。套接字在所有的网络操作系统中都是必不可少的。socket在TCP/IP模型中的位置socket的类型流式套接字(SOCK_STREAM)流式套接字可以提供可靠的,面向连接的通信。流式套接字对应的是TCP协议,TCP协议保证了数据传输的正确性和顺序性。如:通过流式套接字发送了顺序数据:1,2,3,那么,数据到达远程时的顺序也是1,2,3。数据报套接字(SOCK_DGRAM)提供不可靠的,无连接通信。数据报套接字对应的是UDP协议。UDP协议不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。这就意味着:1、你发送的数据可能不会到达。2、发送的数据可能以不同的顺序到达。3、发送的数据可能存在错误。优点是数据传输速度快。原始套接字(SOCK_RAW)原始套接字主要用于一些协议的开发,可以进行比较底层的操作,它的功能强大,但使用不如上面两种套接字方便。TCP/IP端口号如果把IP地址比作一间房子,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口可以有65536个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0到65535。网络程序之间的连接要使用TCP/IP,应用程序必须提供源和目标应用程序的IP地址和端口号,端口号提供了一个发送的位置。每个端口由一个唯一的编号来标识。1024以下的端口由internet编号分配机构(IANA)分配。127.0.0.1:是回环地址,指本地机,一般用来测试使用。无论什么程序,一旦使用回送地址发送数据,协议软件立即返回,不进行任何网络传输。(使用自己机子的ip也可以)IP地址转换函数inet_addr():将一个用数字和点表示的IP地址的字符串转换成一个无符号的长整型数据。inet_aton():将一个无符号的长整型数据转换成用数字和点表示的IP地址字符串。inet_addr()inet_ntoa()字节序不同类型的CPU主机中,内存存储多字节整数序列有两种方法:小端序(little-endian):又称为主机字节序。低字节保存在前面的内存单元中。大端序(big-endian):又称为网络字节序。高字节保存在前面的内存单元中。字节排序函数(h:host,n:network)htonl:将主机字节顺序转换为网络字节顺序。对无符号长型操作。ntohl:将网络字节顺序转换为主机字节顺序。对无符号长型操作htons:将主机字节顺序转换为网络字节顺序。对无符号短型操作ntohs:将网络字节顺序转换为主机字节顺序。对无符号短型操作socket()(建立一个套接字)bind()(地址绑定)bind()(地址绑定)建立套接字描述符与相应的套接字地址对应起来。意味着该套接字只接受来自绑定的协议端口(IP地址和TCP端口)的数据。端口号和ip地址都要是网络字节顺序。connect()(建立连接)listen()(等待连接)accept()(接受连接)send()(发送数据,用于TCP通信)recv()(接收数据,用于TCP通信)sendto()(发送数据,用于UDP通信)recvfrom()(接收数据,用于UDP通信)2.UDP套接字UDP套接字介绍UDP套接字的实现基于TCP/IP协议,面向无连接的通信模式。UDP套接字不能提供可靠的数据传输,但UDP套接字的实现简单,并且传输效率高,因而得到广泛的应用。如:DNS(域名系统)、NFS(网络文件系统),SMMP(简单网络管理协议)UDP套接字的实现UDP套接字分为服务器端和客户端两部分:1、服务器端的步骤:a、建立UDP套接字b、绑定套接字到特定的地址c、等待并接受客户端的信息d、处理客户请求e、发信息回客户端f、关闭套接字2、客户端步骤a、建立UDP套接字b、发送信息给服务器端c、接收来自服务器端的信息d、关闭套接字3.TCP套接字TCP套接字介绍TCP套接字的实现基于TCP/IP协议,是带连接的通信模式。是一个可靠的的传输协议。在使用TCP套接字进行数据传输的过程中有三次握手操作:1、建立连接时,客户端发送SYN(握手信号)包到服务器,并进入SYN_SEND状态,等待服务器确认。2、服务器收到SYN包,必须确认客户的SYN,同时,自己也要发送一个SYN+ACK包给客户端,此时,服务器进入SYN_RECV状态。3、客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕后,客户端和服务器进入ESTABLISHED(建立连接)状态,完成三次握手。(比如要和学生沟通)TCP套接字的实现实现TCP套接字的基本步骤如下,分为服务器端和客户端两部分。1、服务器端:a、创建套接字b、捆绑套接字c、设置套接字为监听模式,进入被动接收连接请求状态。ddosd、接收请求,建立连接。e、发送接收数据(send()、recv())。f、终止连接2、客户端步骤:a、创建套接字。b、请求与远程服务器的连接。c、发送接收数据d、终止连接4.网络高级编程高级编程的必要性应用程序中同时处理多路的输入输出时,如果采用阻塞模式,那么将得不到预期的目的;如果采用非阻塞模式,对多个输入进行轮询,就太浪费时间;如果设置多个进程,将使程序变的更加复杂,而且,在多个客户端存在时使用是不合理的。最好的办法是使用I/O多路复用。I/O多路复用的思想I/O多路复用能够在指定的时间内对多个客户端进行监听,是否有数据包到达,也能监听发送和错误的数据包,但通常监听是否有数据包到达。通常情况下,非阻塞会和I/O多路复用一起使用。使用I/O多路复用的步骤:1、设置网络通信是非阻塞通信。实现方法有两种:a、调用fcntl函数b、调用ioctl函数2、使用select函数对I/O进行查询。描述符集合操作(fd_set)是一组文件描述符(fd)的集合。将要查询的套接字放到描述符集合中,然后对描述符集进行操作。由于fd_set类型的长度在不同的平台上不同,因此,应该使用一组标准的宏定义来处理此类变量。1、FD_ZERO(fd_set*fdset):将指定的文件描述符清空。2、FD_SET(intfd,fd_set*fdset):在文件描述符集合中增加一个新的文件描述符。3、FD_CLR(intfd,fd_set*fdset):在文件描述符集合中删除一个文件描述符。4、FD_ISSET(intfd,fd_set*fdset):测试指定的文件描述符是否在该集合中。
本文标题:12_网络编程
链接地址:https://www.777doc.com/doc-3356748 .html