1、Socket概念
Socket 编程是一种底层的网络编程,因为它涉及到很多底层的数据流操作;也比较复杂,需要了解很多网络中的概念,包括他们的细节,例如 TCP/IP 协议等。开发的时候直接使用 C 语言编写比较麻烦。但是底层的网络编程并不代表它功能不强大,恰恰相反,正因为层次低,Socket 编程与基于 Web service 高层次网络编程相比,能够提供更强大的功能和更灵活的控制,但是要复杂很多。
Socket 采用 TCP/IP 协议模型。TCP/IP 协议的传输层又有两种传输协议:TCP(传输控制协议)和 UDP(用户数据报协议)。TCP 是基于连接的,而 UDP 是无连接的;TCP 对系统资源的要求比较多,因为它是一直在等待客户端的数据操作响应,而 UDP 少;TCP 保证数据正确性而 UDP 可能丢包;TCP 保证数据顺序而 UDP 不能保证。
2、Socket 编程
使用 Socket 进行 C/S 结构编程,连接过程如图所示:
服务器监听某个端口是否有连接请求。服务器端程序处于堵塞状态,直到客户端向服务器发出连接请求,服务器端接收请求程序才能向下运行。一旦连接建立起来,通过 Socket 可以获得输入输出流对象。借助于输入输出流对象就可以实现与客户端的通信,最后需要关闭 Socket 和释放一些资源,包括关闭输入/输出流。
在iOS中,客户端 Socket 编程有三种技术:
(1)使用NSStream——面向objective-c语言实现的,由苹果提供的Foundation框架的API;
(2)使用CFStream——面向C语言的实现,由苹果提供的Core Foundation框架的API;
(3) 使用BSD Socket——也叫博客里套接字(Berkeley Socket),是UNIX平台下广泛使用的socket编程。它是面向C语言实现的,完全使用C编写,但是比较麻烦。
在iOS中,服务器端 Socket 编程有两种技术:
(1)使用CFStream——面向C语言的实现,由苹果提供的Core Foundation框架的API;
(2)使用BSD Socket——也叫博客里套接字(Berkeley Socket),是UNIX平台下广泛使用的socket编程。它是面向C语言实现的,完全使用C编写,但是比较麻烦。
未完待续......