借用别人的流程图
1.面向连接的套接字的系统调用时序图
无连接协议的套接字调用时序图
socket可以认为是一种通信描述符,是一个五元组:协议,双方的ip地址,双方的端口。
类型有三种(1和2两种类型统称为标准套接字):
1,流套接字(sock_stream):其使用传输控制协议(tcp),可以实现可靠的数据服务,能够实现无差错|无重复发送|并按顺序传达。该套接字适合传输大量的数据,但不支持广播和多播方式。
2,数据报套接字(sock_dgram):其使用用户数据报协议(udp),提供一种无连接服务,是一种不可靠方法,但其开销比使用流套接字低,而且支持广播和多播方式。
3,原始套接字(sock_saw) 能够对较低层次的协议直接访问,网络监听技术很大程度上依赖于它,可以读写内核没有处理的ip数据报。主要作用在于避开tcp/ip处理机制,被传送的数据可以被直接传送给需要它的应用程序。
小端:存储方式是低位优先
大端:存储方式是高位优先
网络字节顺序采用大端方式
相关函数解释
server:
socket:确定所用的协议
bind:实现与本地ip和端口号的绑定,即确定本地ip和端口号
listen:侦听,即准备好接收连接,服务器设置缓冲区;
accept:服务器接受客户端请求建立连接,实现与远程ip和端口号的关联
client:
socket与bind如上,图2中bind的标识写错了
connect:实现与远程ip和端口号的关联
(udp方式时无需建接连接,双方都可以为服务端,先发消息一方为客户端,客户端可以不用bind绑定ip与端口,而由系统指定,但充当服务器一方则要bind,另外,udp时也可以使用connect,但其作只是告诉内核并由内核保存,以便在数据传输过程中可以使用send与rece函数)
上客户端访问代码
头文件
#import <netdb.h>
#import <arpa/inet.h>