iOS开发之socket简介

摘要:
网络上的两个程序通过双向通信连接交换数据,然后理解系统调用和应用程序接口(API)的概念。系统调用是应用程序和操作系统之间的控制转移。控制权从应用程序转移到系统调用接口。传输层TCP协议和网络层IP协议已集成到操作系统中,套接字接口用作应用程序进程和传输层协议之间的接口。

1,socket是什么?

2,socket的作用

3,socket怎么用

4,socket的扩展

——————————————————————

socket是什么?

         Socket这个名词现在有很多不同的意思,这里主要讲到其中2个含义。一是,套接字socket=(IP地址:端口号),是端的概念。二是,socket在应用层和传输层之间,是层的概念。

         要理解socket是什么,首先要理解网络的分层结构,目前internet广泛使用的TCP/IP模型,总结起来网络模型分为四层,从上层往下依次为:应用层、传输层、网络层、接入层。

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一个端点(endpoint)称为一个socket。(端)

         然后理解系统调用(system call)和应用程序接口(API)的概念。系统调用就是应用程序和操作系统之间传递控制权。当应用程序启动系统调用时,就把控制权从应用程序传递给系统调用接口,此接口又把控制权传递给操作系统,操作系统执行内部的操作,执行完毕控制权又通过系统调用返回给应用程序。这个系统调用接口就是API。API定义了很多系统调用的函数,通过请求调用就可以获得操作系统的服务。目前最著名就是伯克利为UNIX定义的socket interface。(层)

         回到网络中,传输层TCP协议和网络层的IP协议已经集成到操作系统中,应用程序在应用层,这就涉及到应用进程与操作系统的调用,而socket interface就作为应用进程和运输层协议之间的接口。因此,应用进程要使用TCP/IP协议进行通信就必须通过socket和操作系统进行调用请求服务。

iOS开发之socket简介第1张 

————————————————————-

socket的作用?

         socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信。Socket把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

————————————————————-

socket的怎么用?

         socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。socket是可以理解为一种特殊的文件,socket函数就是对其进行的操作(读/写IO、打开、关闭)。

Socket通信的双方可以分为客户端和服务器端,客户端的基本流程如下:

  1.             创建socket
  2.             连接到服务器
  3.             发送数据到服务器
  4.             从服务器接受数据
  5.             关闭连接

服务器端的步骤稍微多一些,主要增加了与端口绑定(bind)和监听(listen)、接受阻塞(accept)等流程

 iOS开发之socket简介第2张

——————————————————————

socket的扩展——即socket编程

         socket编程是利用socket接口为应用层自定协议用于应用进程的网路通信。那为什么要自定义呢,自定义目的是满足自己的应用需求。例如http协议是应用层使用最多最广泛的协议,http是单工阻塞性质的协议,如果你需要一个全双工,无阻塞的双向传输,那http就满足不了。http定义自己的包头,你要是觉得传输效率极其重要,这样的包头太臃肿,你也需要自定义协议。自定义应用层协议就需要socket编程,目前应用的场景有,即时通讯,社交订阅更新,视频会议,网络游戏,股票基金实时价格等等。

         另外还有,网络模型ATM,不同于TCP/IP模型,这就相应的有自己的协议和socket,这也用到socket编程。

——————————————————————-

参考资料

1,      谢希仁《计算机网络(第五版)》

2,      http://www.cnblogs.com/dolphinX/p/3460545.html

3,      http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html

4,      http://blog.csdn.net/hguisu/article/details/7445768/

免责声明:文章转载自《iOS开发之socket简介》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Intel daal数据预处理Selenium 学习笔记(三)下篇

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

相关文章

Ubuntu16桥接模式上网并设置静态ip

今天想运行老师发的代码,虚拟机又抽风了,网连不上,ping也主机也ping不通,没办法又忙活半天重新配置了一遍网络这方面,为了方便下次再配置,记录一下方法步骤: 首先设置将虚拟机设置为桥接模式   接下来查看主机的ip,例如我的windows系统,就win+r,接下来输入cmd。命令行输入ipconfig查看本机ip   这样就获取到主机的ip,子网掩码和...

TCP 的那些事儿(下)

本文转载自TCP 的那些事儿(下) 导语 这篇文章是下篇,所以如果你对TCP不熟悉的话,还请你先看看上篇《TCP的那些事儿(上)》 上篇中,我们介绍了TCP的协议头、状态机、数据重传中的东西。但是TCP要解决一个很大的事,那就是要在一个网络根据不同的情况来动态调整自己的发包的速度,小则让自己的连接更稳定,大则让整个网络更稳定。在你阅读下篇之前,你需要做好准...

socket---异常

Socket异常 客户端异常 1 java.net.ConnectException: Connection refused: connect。 该异常发生在客户端进行new Socket(ip, port)操作时,该异常发生的原因是或者具有ip地址的机器不能找到(也就是说从当前机器不存在到指定ip路由),或者是该ip存在,但找不到指定的端口进行监听。...

关于QSocket的释放的一个需要注意的情况(必须先断开连接)

最近在用QtNetwork编写服务器程序进行TCP/IP通信,大体过程如下: 1. 创建一个QTcpServer实例,监听目标IP和端口; 2. 一旦监听到有连接,获取和客户端之间的socket; 3. 使用socket进行通信; 4. 通信结束后,可以手动释放socket,也可以不管它,在释放QTcpServer的时候会把其下的所有socket全部自动释...

Qt封装QTcpServer参考资料--QT4中构建多线程的服务器

首先说一下对多线程这个名词的理解过程。以前听说过很多次多线程这个词,而且往往与服务器联系起来,因此一直把多线程误解为服务器特有的功能;直到这次课程设计,仔细学习了一下多线程的机制,才知道真正的意思。简单的来说,就是同时有多个线程一起运行,而不同的线程可以执行不同的操作。举个例子,一个图像处理工具,可以用鼠标一边移动图像,一边用快捷键缩放图像,此时,移动图像...

Akka系列(九):Akka分布式之Akka Remote

前言.... Akka作为一个天生用于构建分布式应用的工具,当然提供了用于分布式组件即Akka Remote,那么我们就来看看如何用Akka Remote以及Akka Serialization来构建分布式应用。 背景 很多同学在程序的开发中都会遇到一个问题,当业务需求变得越来越复杂,单机服务器已经不足以承载相应的请求的时候,我们都会考虑将服务部署到不同的...