赞
踩
先来看一下百度百科介绍
套接字(Socket)
,就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口。
套接字
是通信的基石,是支持TCP/IP协议的路通信的基本操作单元。可以将套接字看作不同主机间的进程进行双间通信的端点,它构成了单个主机内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序),各种进程使用这个相同的域互相之间用Internet协议簇来进行通信。
Socket(套接字)
可以看成是两个网络应用程序进行通信时,各自通信连接中的端点,这是一个逻辑上的概念。它是网络环境中进程间通信的API(应用程序编程接口),也是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连进程。通信时其中一个网络应用程序将要传输的一段信息写入它所在主机的 Socket中,该 Socket通过与网络接口卡(NIC)相连的传输介质将这段信息送到另外一台主机的 Socket中,使对方能够接收到这段信息。 Socket是由IP地址和端口结合的,提供向应用层进程传送数据包的机制。
要想理解 socket 首先得熟悉一下TCP/IP协议, TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主机如何连入因特网及数据如何再它们之间传输的标准。
不同于OSI模型的七个分层,TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中。
OSI七层网络模型(从下往上):
socket 一般分为 TCP 网络编程 和 UDP 网络编程。
下面以 TCP 网络编程 为例,看一下Socket编程。
TCP协议
通过三次握手
建立一个可靠的连接:
一幅图来理解TCP 网络编程,图片参考网上资料。
socket 是 "打开—读/写—关闭"
模式的实现
下面简单介绍一下常用的API方法作用和参数
socket:根据指定的地址族、数据类型和协议来分配一个socket的描述字及其所用的资源。
int socket(int domain, int type, int protocol);
domain:协议族,常用的有AF_INET、AF_INET6、AF_LOCAL、AF_ROUTE其中AF_INET代表使用ipv4地址
type:socket类型,常用的socket类型有,SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等
protocol:协议。常用的协议有,IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等
bind:把一个地址族中的特定地址赋给socket
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
sockfd:socket描述字,也就是socket引用
addr:要绑定给sockfd的协议地址
addrlen:地址的长度
listen:监听socket
int listen(int sockfd, int backlog);
sockfd:要监听的socket描述字
backlog:相应socket可以排队的最大连接个数
connect:连接某个socket
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
sockfd:客户端的socket描述字
addr:服务器的socket地址
addrlen:socket地址的长度
accept: TCP服务器监听到客户端请求之后,调用accept()函数取接收请求
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
sockfd:服务器的socket描述字
addr:客户端的socket地址
addrlen:socket地址的长度
read:读取socket内容
ssize_t read(int fd, void *buf, size_t count);
fd:socket描述字
buf:缓冲区
count:缓冲区长度
write:向socket写入内容,其实就是发送内容
ssize_t write(int fd, const void *buf, size_t count);
fd:socket描述字
buf:缓冲区
count:缓冲区长度
close
int close(int fd);
socket标记为以关闭 ,使相应socket描述字的引用计数-1,当引用计数为0的时候,触发TCP客户端向服务器发送终止连接请求。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。