文档章节

深入浅出--iOS的TCP/IP协议族剖析&&Socket (2)

天机
 天机
发布于 2016/02/24 12:13
字数 1098
阅读 15
收藏 0

 

Socket

Socket 简介

       Socket起源于 20 80 年代早期,最早由 4.1c BSD UNIX 引入,所以也称之为“BSD Socket 或者 Berkeley Socket”BSD Socket 是事实上的网络应用编程接口标准,其它编程语言往往也是用与这套(用C写成的编程接口)类似接口。

       Socket 能够实现网络上的不同主机之间或同一主机的不同对象之间的数据通信。所以,现在 Socket 已经是一类通用通信接口的集合。

大的类型可以分为网络 Socket 和本地 Socket 两种。

本地上的两个进程如何通信?

       内存共享(munmap())

       消息和队列;

       管道(匿名管道pipe()和命名管道mkfifo())

       信号量(P V操作);

       RPC remote protocol control

       本地Socket;

网路上的两个进程如何通信?

本地进程间通信(IPC)通过PID(在终端中输入ps -ef可查看PID)可以唯一确定彼此,然后通过共享内存,消息队列来通;网络上的两个进程确定彼此需要IP与端口号,通过传输层(TCP/UDP)协议进行通信;

这就是网络 Socket

socket可以理解为:在TCP/UDP 加一个端口(在网卡注册的,还记得吧)绑定。

网路socket 本地 Socket对比

       在同一个设备上,两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中可以使用PID来唯一标示一个进程;

       PID只在本地唯一,网络中的两个进程PID冲突几率很大,此时显然不行了,怎么办?

IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,所以可以利用ip地址+协议+端口号唯一标示网络中的一个进程。

Socket通信就是一种确定了端口号的TCP/IP通信,或者说Socket通信与IP通信差别就是端口确定,协议确定。

用一张图表达一下:

Socket.png

端口的打开是双方的,在C/SClient&&Server)结构的TCP连接中不仅仅要注意到S的端口(监听的),实际上C也开了一个端口,而C端的端口是动态端口,TCP连接建立的时候,C端的端口会在三次握手结束后确定,动态打开一个,这个端口不受用户/程序员的控制。

Socket C 端书写步骤

       创建ke户端Socket

       创建fu务器Socket

       连接到fu务器(Socket编程)

       发送数据给fu务器

       接收fu务器返回的数据

       关闭Socket : close(socketNumber)

一张经典的Socket C/S的步骤图。

Socket.jpg

按照上面步骤就可以写一个socket的通信的小demo

写好的已经放在了我的github

此时没有写fu务端,怎么测试?

可利用:nc -lk 端口号:始终监听本地计算机此端口的数据。

egnc -lk 6666

操作步骤gif

       监听 6666端口

       connettion

       发送socketfu务器接收到socket

       fu务端send hello socket

操作步骤.gif

Ssocket通信步骤

       提供一些fu

       将这个fu务与自己的IP地址、端口绑定

       监听任何到这个IP+端口的TCP请求

       接受/拒绝建立这个TCP连接

       读写

       断开TCP连接

socketfu务端下次再谈!以上就是本次回顾。

       参考资料1

       参考资料2

       参考资料3

       参考资料4

       参考资料5

 


本文转载自:http://www.cocoachina.com/ios/20160223/15347.html

天机
粉丝 1
博文 22
码字总数 0
作品 0
部门经理
私信 提问
那些著名和非著名的 iOS 面试 - 中篇

如果你依然在编程的世界里迷茫,不知道自己的未来规划,小编给大家推荐一个IOS高级交流群:458839238 里面可以与大神一起交流并走出迷茫。小白可进群免费领取学习资料,看看前辈们是如何在编...

开发之家
04/05
0
0
求大神指点简历

简 历 个人信息 姓 名: xxx 性 别: 男 出生日期: 1990年1月7日 居住地址: 上海 工作年限: 二年 电子邮件: xxxx@163.com 手 机: 186xxxx6859 户 口: 身 高: 婚姻状况: 新疆 175cm ...

尐帥鱼
2013/06/14
802
11
【北京】国内最大的MV网站急招【P2P技术经理】【Android,JAVA,C++,Flash/Flex工程师等职位】

地点北京 薪资open P2P技术经理 职位描述: 1、负责P2P 系统的设计和优化工作 2、管理相关项目,确保项目的开发质量和开发进度 3、指导培养团队工程师 职位要求 1、工作细致深入,责任心强;...

nadia
2012/01/10
557
2
网络抓包源代码

转自:http://hi.baidu.com/wuxiaoming1733/blog/item/d2b5b738e4094bddd4622570.html 在进行iOS开发过程中,经常会遇到各种各样的网络访问问题,以前苦于没有抓包工具,很多网络问题解决起来...

长平狐
2013/01/11
587
0
《小印记》iOS源码分享--HTTPS配置篇

笔者前不久终于发布了自己的APP《小印记》,在此分享一些iOS源码,如果读者学到了有用的东西,希望能前往App Store下载《小印记》支持一下笔者,谢谢! 《小印记》iOS源码分享--极光推送实践...

_子墨
2017/03/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

读书replay《maven实战》.1.20190526

前情提要 maven这个工具用了好久了,但是一直都用的迷迷糊糊的,没有对它进行过系统性的学习,只是知道一些常用的功能怎么实现,所以20190516这一天我从JD购买了徐晓斌老师所著的《maven实战...

wanxiangming
26分钟前
0
0
真实项目案例实战——【状态设计模式】使用场景

什么是状态模式 状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。 状态模式应用场景 1.一个对象的行为取决于它的状态,并且它必须在运行时刻根...

须臾之余
32分钟前
0
0
Java 实现把字符串转换成整数【底层实现】

https://blog.csdn.net/zl18310999566/article/details/80263396

qimh
36分钟前
0
0
IDEA的debugger

1、win下节省内存空间 3、条件断点

一只小青蛙
47分钟前
3
0
炸!亿级数据DB秒级平滑扩容

一步一步,娓娓道来。 一般来说,并发量大,吞吐量大的互联网分层架构是怎么样的? 数据库上层都有一个微服务,服务层记录“业务库”与“数据库实例配置”的映射关系,通过数据库连接池向数据...

编程SHA
52分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部