socket-套接字

TCP/IP协议、http协议、ftp协议

1、计算机之间交流、传递信息需要约定相应的协议,就好比人与人之间交流的语言一样,如果你用中文和一个不懂中文的外国人讲话,他根本就听不懂,只能一脸懵逼的看着你。

2、计算机网络传输常用的是7层网络传入协议,包括应用层、表示层、会话层、传输层、网络层、数据链路层和物理层。

3、TCP/UDP属于传输层协议,http、ftp属于应用层协议。
其中TCP是面向连接的,可靠的、基于字节流的传输协议;
而http是超文本传输协议,一般是单向的,客户端发起,服务端响应,客户端确认收到,服务端断开连接结束。http是单向的,无连接,无响应状态的传输协议;
ftp是文件传输协议,使用TCP生成一个虚拟的链接用于控制信息,然后在生成一个单独的TCP连接用于传输数据。FTP有两种使用模式:主动和被动。主动模式要求客户端和服务器端同时打开并且监听一个端口以建立连接。在这种情况下,因为必须开放一个随机的端口以建立连接,当防火墙存在时,客户端很难过滤处于主动模式下的FTP流量。所以,创立了被动模式。被动模式只要求服务器端产生一个监听相应端口的进程,这样就可以绕过客户端安装了防火墙的问题。

套接字-socket

1、使用TCP传输需要确定一个链接的对象,问题是链接的对象上可能有多个应用在同时运行,如何将我们接收到的信息分配给对应的对象并做相应的处理呢?

2、这就产生了套接字,套接字主要用描述IP和端口号,系统分配对应的端口给相应的应用,端口号是唯一的并且绑定了指定的套接字,通过端口号找到要链接的应用对象。

3、通常一个基于TCP协议的客户端与服务器端的流程如下:
服务器程序开启,同时监听某个指定好的,大于1024的端口号;
客户端启动,并且按照服务器的IP与端口号向服务器访问;
服务器接到链接请求,链接接连成功,并且向客户端返回一个链接成功的返回包;

4、理论上,只要链接成功后,除非主动断开,否则认为链接一直存在,但实际上我们需要通过各种手段去判断链接状态是否正常,其中一种方式就是通过像服务器发送心跳包的形式,客户端向服务器发送一段固定的数据包,服务器根据收到的内容判断这个是心跳包,同时也返给客户端一个信息,告知可短短链接正常。

CocoaAsyncSocket

1、GCDAsyncSocket对象(以下简称GCDSocket**对象)都可以理解为一个socket套接字,我们的操作都是针对于这个socket执行的各种命令,可以打开一个端口侦听,同样也可以连接其他计算机的端口进行数据通讯等等等等。

2、创建一个GCDAsyncSocket对象,也即套接字对象。然后通过IP和端口链接到服务器。

GCDAsyncSocket  socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];

NSError *err;
[socket connectToHost:@“192.168.10.111” onPort@”60000″ error:&err];
if (err != nil)
{
NSLog(@”%@”,err);
}

3、链接成功后会收到相应的响应

-(void)socket:(GCDAsyncSocket *)socket didConnectToHost:(NSString *)host port:(uint16_t)port {
// -1 表示没有超时限制 0用于区分读取的标识
[socket readDataWithTimeout:-1 tag:0];
}

4、收发消息后都会有有相应的响应

-(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
-(void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag

5、一旦链接成功后,我们就会派个门卫去蹲点,一旦有消息来了就通知前端做出响应,如更新UI,发送消息则会派个快递员去送消息,消息发送成功后也会回来报告消息发送成功了。

6、TCP通讯协议是一个基于字节流的运输层通信协议,其数据传输的形式也是以流的形式提现,而我感觉在使用GCDAsyncSocket的过程中我们可以很好的体会到流的概念,首先来说为什么这种TCP的这种传输形式要叫流而不像UDP中的那样叫做包?流之中又写入和读出的概念,我们可以把整个TCP通讯的连接看作为一条无水的河流,当然因为他没水所以你可以称它为沟,而向其写入数据即是向河流注入水,被写入的数据会向水一样流向连接的另一端。读即是从河流中取水,只要读得动作在继续,并且河流之中有水,那么我们就可以不停的取到数据,不论是河流之中有水你确没有去读亦或者是你去读了而河流之中没有水都会引发看起来完全相同的反应就是没有数据返回,所以在很多时候我们要处理更多的关于接收数据的逻辑的处理。正如我们目前使用的方法就是一种比较粗暴有效的方法——一旦开启连接读取的动作就永不停歇。

【参考】

[地址一]https://www.jianshu.com/p/5aecce087459
[地址二]https://www.jianshu.com/p/ad15c9565c34

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容