IOS网络编程之Socket详解

摘要:
套接字描述IP和端口对。为了区分不同的应用程序进程和连接,许多计算机操作系统为应用程序提供套接字接口以与TCP/IP协议交互。TCP/IP分层模型也附在下面:2。建立套接字连接至少需要一对套接字。一个在客户端运行,称为ClientSocket,另一个在服务器端运行,名为ServerSocket。同时,将确认序列号设置为客户的ISN加1,以确认客户的SYN消息段。

Socket描述了一个IP、端口对。它简化了程序员的操作,知道对方的IP以及PORT就可以给对方发送消息,再由服务器端来处理发送的这些消息。所以,Socket一定包含了通信的双发,即客户端(Client)与服务端(server)。

1)服务端利用Socket监听端口;
2)客户端发起连接;
3)服务端返回信息,建立连接,开始通信;
4)客户端,服务端断开连接。

1套接字(socket)概念

       套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。

       应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应 用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

  下面另附关于TCP/IP分层模型:

  IOS网络编程之Socket详解第1张

2 建立socket连接

       建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket,另一个运行于服务器端,称为ServerSocket。

       套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

       服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

       客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

       连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发 给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

3、SOCKET连接中的TCP、UDP连接

  传输控制协议TCP和用户数据报协议(UDP)都是传输层协议。   传输控制协议TCP是TCP/IP协议栈中的传输层协议,它通过序列确认以及包重发机制,提供可靠的数据流发送和应用程序的虚拟连接服务。与IP协议相结合,TCP组成了因特网协议的核心。  用户数据报协议(UDP)是 ISO 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。 UDP 协议基本上是 IP 协议与上层协议的接口。 UDP 协议适用端口分别运行在同一台设备上的多个应用程序。
       创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。

  TCP、UDP、IP协议详解见:http://blog.chinaunix.net/uid-26833883-id-3627644.html

4、Socket连接与HTTP连接

  由于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。但在实际网 络应用中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。
  而HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。
  HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
  由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。

5、Socket三次握手建立连接

a.请求端(通常称为客户)发送一个SYN段指明客户打算连接的服务器的端口,以及初始序号(ISN)。这个SYN段为报文段1。

b.服务器发回包含服务器的初始序号的SYN报文段作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号

c.客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认

这三个报文段完成连接的建立。这个过程也称为三次握手(three-way handshake)

免责声明:文章转载自《IOS网络编程之Socket详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇apache 开机自启动脚本设置Nice boat下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

php大文件上传(切片)方法

1、介绍enctype enctype属性规定发送到服务器之前应该如何对表单数据进行编码。 enctype作用是告知服务器请求正文的MIME类型(请求消息头content-type的作用一样) 1、1 enctype的取值有三种 值 描述 application/x-www-form-urlencoded 在发送前编码所有字符(默认) mult...

使用HMAILSERVER搭建邮件服务器

使用hMailServer搭建邮件服务器 文/玄魂 前言 对于企业用户而言,拥有属于自己的邮件服务器,在员工管理,内部信息沟通,对外推送消息等方面,都大有益处。 本文没有什么高深的技术内容,只是以windows server 2008 为例,使用HMAILServer,介绍搭建邮件服务器的全过程,供参考。 操作系统: 邮件服务组件:(http://w...

Linux内核 TCP/IP、Socket参数调优

/proc/sys/net目录所有的TCP/IP参数都位于/proc/sys/net目录下(请注意,对/proc/sys/net目录下内容的修改都是临时的,任何修改在系统重启后都会丢失),例如下面这些重要的参数: 参数(路径+文件) 描述 默认值 优化值 /proc/sys/net/core/rmem_default 默认的TCP数据接收窗口大小(...

RabbitMQ学习07--消息重复消费

幂等性操作 :可以重复执行的操作,可以不用保证消息重复消费。 非幂等性,需要保证消息不会被重复消费。 重复消费原因:消费者消费了消息,但并没有向rabbitmq发送ack。 为了解决消费重复消费的问题,可以使用Redis,在消费者消费之前,先将消息的id放到Redis中, id-0(正在执行业务) id-1(业务执行成功) 如果ack失败,在RabbitM...

wParam与lParam的区别

wParam与lParam的区别 lParam 和 wParam 是宏定义,一般在消息函数中带这两个类型的参数,通常用来存储窗口消息的参数。 LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);wParam 通常用来存储小段信息,如,标志lParam...

win10安装anaconda和Pycharm

本文来源:Python 工具——Anaconda+Pycharm 的安装过程 - 知乎 (zhihu.com) 其它参考来源: (41条消息) PyCharm与Anaconda超详细安装配置教程_思绪无限的博客-CSDN博客_anaconda 安装pycharm Python,Pycharm,Anaconda等的关系与安装过程~为初学者跳过各种坑 - TQ...