socket (套接字)是通信的基石,是支持tcp/ip协议的网络通信的基本操作单元,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远端主机的IP地址,远端进程的协议端口。
Socket是对TCP/IP协议的封装,socket本身并不是协议,而是一个调用接口(API),通过socket,我们才能使用TCP/IP协议。
多个TCP连接或多个应用程序进程可能需要通过同一个TCP/IP协议端口传输数据。为了区别不同的应用程序进程和连接,计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(socket)接口。应用层可以和传输层通过socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
建立socket连接至少需要一对套接字,其中一个运行于客户端,称为clientsocket,另一个运行于服务器端,称为serversocket。套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
socket 可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该socket连接就是一个TCP连接,UDP连接同理。
Socket 使用的库函数
1、创建套接字
Socket(af,type,protocol)//建立服务器/客户端的连接(面线连接TCP)
bind(sockid,local addr,addrlen)//建立地址和套接字的联系
listen(Sockid,quenlen)// 服务器端侦听客户端的请求
2、客户端请求连接
Connet(sockid, destaddr,addrlen)//连接服务器
newsockid=accept(Sockid,Clientaddr,paddrlen)//发送、接收数据
3、面向连接
send(sockid,buff,bufflen)
recv()
4、面向无连接
sendto(sockid,buff,…,addrlen)
recvfrom()
5、释放套接字
close(socket)
在iOS中以NSStream(流)来发送和接收数据,可以这只流的代理,对流的状态的变化做出相应的动作(建立连接,接收到数据,连接关闭)。
NSStream:数据流的父类,用于定义抽象特性,例如:打开、关闭代理,NSStream继承自CFStream(CoreFoundation)
NSInputStream:NSStream的子类,用于读取输入
NSOutputStream:NSStream的子类,用于写输出