12_网络编程.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:36 大小:7MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

12_网络编程.ppt

12_网络编程.ppt

预览

免费试读已结束,剩余 26 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

网络编程1.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()(地址绑定)端口号和ip地址都要是网络字节顺序。connect()(建立连接)listen()(等待连接)accept()(接受连接)send()(发送数据,用于TCP通信)recv()(接收数据,用于TCP通信)sendto()(发送数据,用于UDP通信)recvfrom()(接收数据,用于UDP通信)2.UDP套接字UDP套接字的实现UDP套接字分为服务器端和客户端两部分:1、服务器端的步骤:a、建立UDP套接字b、绑定套接字到特定的地址c、等待并接受客户端的信息d、处理客户请求e、发信息回客户端f、关闭套接字2、客户端步骤a、建立UDP套接字b、发送信息给服务器端c、接收来自服务器端的信息d、关闭套接字3.TCP套接字TCP套接字的实现实现TCP套接字的基本步骤如下,分为服务器端和客户端两部分。1、服务器端:a、创建套接字b、捆绑套接字c、设置套接字为监听模式,进入被动接收连接请求状态。ddosd、接收请求,建立连接。e、发送接收数据(send()、recv())。f、终止连接4.网络高级编程使用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*fds