预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10
亲,该文档总共36页,到这已经超出免费预览范围,如果喜欢就直接下载吧~
如果您无法下载资料,请参考说明:
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、设置套接字为监听模式,进入被动接收连接请 求状态。ddos
d、接收请求,建立连接。
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