Socket编程体验




Socket编程体验 


























网络编程 
、0转化为电流强弱来进行传 输,到达目的地后再转化为1、0,也就是常说的数模与模数转换)。这一 层的数据叫做比特(bit),主要设备:集线器 
.2. 数据链路层:主要将从物理层接收的数据进行MAC地址的封装与解封装。 常把这一层的数据叫做帧,主要设备:交换机 
.3. 网络层:选择合适的网间路由和交换结点, 确保数据及时传送,将从下层 接收到的数据进行IP地址的封装与解封装。常把这一层数据叫做数据包,主 要设备:路由器。 
.4. 传输层:定义了一些传输数据的协议和端口,如TCP、UDP协议,主要将从 下层接收的数据进行分段和传输,到达目的地址后再进行重组,以往把这 一层数据叫做段。 
.5. 会话层:通过传输层建立数据传输通路。在系统之间发起会话或者接受会 话请求(设备之间需要互相认识) 
.6. 表示层:主要是进行对接收的数据进行解释、压缩与解压缩等,即把计算 机能够识别的东西转化成人能够识别的东西(如图片、声音等) 
.7. 应用层:主要是一些终端的应用,比如说FTP(各种文件下载)、浏览器、 QQ等,可以将其理解为在电脑屏幕上可以看到的东西,也就是终端应用。 

网络通讯要素 
• IP地址(唯一标示网络设备的0~255 2^32 = 4G): - 网络中设备的标示- 不易记忆,可以用主机名-本地回环地址:127.0.0.1 主机名:localhost 
• 端口号(定位程序) 
- 用于标示进程的逻辑地址,不同进程的标示 
- 有效端口:0~65535,其中0~1024由系统使用或者保留端口,开发 中不要使用1024以下的端口 
• 传输协议(用什么样的方式进行交互) - 通讯的规则 
- 常见协议:TCP、UDP 
• http://ip:80/文件路径 => URL(统一资源定位) 
• 资源类型是通过MimeType来区分的,告诉客户端是什么类型的 资源 


• URL(确定要访问的资源) •Request=》要访问了• Connect=》开始访问• ....
• 返回结果




TCP & UDP 
• UDP(用户数据报协议)- 将数据及源和目的封装成数据包中,不需要建立连接 - 每个数据报的大小限制在64K之内- 因为无需连接,因此是不可靠协议- 不需要建立连接,速度快
• TCP(传输控制协议)- 建立连接,形成传输数据的通道- 在连接中进行大数据传输(数据大小不收限制) - 通过三次握手完成连接,是可靠协议,安全送达 - 必须建立连接,效率会稍低 

Socket(套接字层、插座--AT&T
• Socket就是为网络服务提供的一种机制 - 在Unix中,网络既是Socket,并不局限在TCP/UDP - Socket可以用于自定义协议 QQ
• 通信的两端都是Socket
• 网络通信其实就是Socket间的通信• 数据在两个Socket间通过IO传输 


Socket通讯流程图 

使用Socket开发网络通讯 
• 在Web服务(WebServices=>XML)大行其道的今天,调用Web服 务的代价是高昂的,尤其是仅仅是抓取少量数据的时候尤其如 此。而使用Socket,可以只传送数据本身而不用进行XML封装, 大大降低数据传输的开销(JSON)
, &readStream, &writeStream);!
!
_inputStream = (__bridge NSInputStream *)readStream;!_outputStream = (__bridge NSOutputStream*)writeStream;!
说明:CFStreamCreatePairWithSocketToHost函数用于将输入流和输出流 绑定到指定主机的对应端口,连接建立之后,既可以像输入流写入数据, 或者从输出流读取数据


设置流代理并添加至运行循环 
_inputStream.delegate = self;!
_outputStream.delegate = self;!
!
// 将输入、输出流添加至运行循环!
[_inputStream scheduleInRunLoop:[NSRunLoop mainRunLoop]forMode:NSDefaultRunLoopMode];!
[_outputStream scheduleInRunLoop:[NSRunLoop mainRunLoop]forMode:NSDefaultRunLoopMode];!
!
// 打开输入、输出流 [_inputStream open];! [_outputStream open]; 

发送登录请求给服务器 
// 1. 创建要发送的字符串 NSString *sendMsg = [NSStringstringWithFormat:@"iam:%@",
_userNameText.text];!
// 2. 将字符串转换成NSData NSData *sendData = [sendMsgdataUsingEncoding:NSUTF8StringEncoding];! !
// 3. 写入数据 [_outputStream write:[sendData bytes]maxLength:[sendData length]]; 

数据流事件响应 
switch (eventCode) {!
case NSStreamEventOpenCompleted:!
NSLog(@"数据流打开完成");!
break;!
case NSStreamEventHasBytesAvailable:!
NSLog(@"有字节读取");!
break;!
case NSStreamEventHasSpaceAvailable:!
NSLog(@"可以写入数据");!
break;!
case NSStreamEventErrorOccurred:!
NSLog(@"无法连接到服务器");!
break;!
case NSStreamEventEndEncountered:!
NSLog(@“到达流末尾,需要关闭流");!
break;! default:!
NSLog(@"未知");!
break;! } 

有字节读取,则读取从服务器返回消息 
// 服务器返回数据,从输入流中读取数据 // 定义一个字符串缓冲数组,用于接收数据 uint8_t buffer[1024];!
// 送输入流中读取数据,并获得读取内容的长度 int len = [_inputStream read:buffermaxLength:sizeof(buffer)];! !
// 判断是否有读入的内容 if (len > 0) {!
// 将读入的数据转换成字符串 NSString *str = [[NSString alloc] initWithBytes:buffer
length:len encoding:NSUTF8StringEncoding];!NSLog(@"=======> %@", str);!


到达流末尾,关闭流并且从运行循环中删除 • [aStreamclose];!
• [aStreamremoveFromRunLoop:[NSRunLoopmainRunLoop]forMode:NSDefaultRunLoopMode];!

回顾 
• Socket就是为网络服务提供的一种机制•Socket允许使用长连接,允许应用程序运行在异步模式,
只有在需要的时候才接收数据
• 流式Socket(SOCK_STREAM):流式是一种面向连接的 Socket,针对于面向连接的TCP服务应用

Thanks! Q & A 

© chenyilong. Powered by Postach.io

iOS-Socket编程体验的更多相关文章

  1. iOS Socket编程-C语言版(TCP)

    . TCP Socket编程 TCP是面向连接的,安全可靠的传输层协议.TCP的程序基本框架设计图: TCP的程序基本框架设计图.jpg 注意:Socket通信一定有要服务端和客户端. 1.1 TCP ...

  2. iOS Socket编程-C语言版(UDP)

    . UDP Socket编程 先讲一讲UDP编程,因为比TCP要简单多了.首先,我们需要明白UDP是用户数据报协议,英文名为User Datagram Protocol,它是面向无连接的. 注意:So ...

  3. IOS - socket 编程初体验

    #import "ViewController.h" @interface ViewController () <NSStreamDelegate, UITextFieldD ...

  4. iOS socket编程 第三方库 AsyncSocket(GCDAsyncSocket)

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

  5. IOS socket编程--Asyncsocket

    iPhone的标准推荐是CFNetwork 库编程,其封装好的开源库是 cocoa AsyncSocket库,用它来简化CFNetwork的调用,它提供了异步操作 主要特性有: 队列的非阻塞的读和写, ...

  6. iOS socket编程

    // // ViewController.m // socket // // Created by emerys on 16/3/2. // Copyright © 2016年 Emerys. All ...

  7. iOS Socket编程(一)基本概念

    1.Socket的解释 Socket翻译过来中文称为套接字, 这里我找到了一段比较官方的解释Socket是什么东西: Socket是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元,包含进行 ...

  8. 《网络安全编程基础》之Socket编程

    <网络安全编程基础>之Socket编程 我的代码 server.c // server.cpp : Defines the entry point for the console appl ...

  9. iOS 网络编程:socket

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

随机推荐

  1. 微软职位内部推荐-Senior Software Engineer_HPC

    微软近期Open的职位: Job Title: Senior Software Engineer_HPC Location: Shanghai, China Are you passionate ab ...

  2. js执行问题

    金三银四搞事季,前端这个近年的热门领域,搞事气氛特别强烈,我朋友小伟最近就在疯狂面试,遇到了许多有趣的面试官,有趣的面试题,我来帮这个搞事 boy 转述一下. 以下是我一个朋友的故事,真的不是我. f ...

  3. PAT题解-1118. Birds in Forest (25)-(并查集模板题)

    如题... #include <iostream> #include <cstdio> #include <algorithm> #include <stri ...

  4. Backbone.js源码浅介

    终于看到一个只有一千多行的js框架了,于是抱着一定可以看懂他的逻辑的心态,查看了他的整个源码,进去之后才发现看明白怎么用容易,看懂怎么写的就难了,于是乎有了这篇博客的标题:浅介,只能粗浅的介绍下Bac ...

  5. SCRUM 12.03

    第二轮迭代从今天起正式开始了.12月3日,我们举行了一次组会. 第一轮迭代结束时,我们意识到第二轮迭代需要实现的功能主要如下: 在下次迭代的时候实现对多个网站的信息进行比较取最优惠的选择,目前我们劲针 ...

  6. Linux第一章读书笔记

    一.Linux历史 Unix强大的根本原因: 1.简洁,仅仅提供几百个系统调用并且有一个非常明确的设计目的 2.文件对待所有东西,通过一套相同的系统调用接口来进行对数据和设备的操作 3.由于用C语言编 ...

  7. 20135337朱荟潼 Linux第一周学习总结——计算机是如何工作的

    朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC-1000029000 1.冯诺依曼体系结 ...

  8. vm15安装esxi6.0

    vmware 15安装esxi6.0时发现出现没有硬盘选择,导致无法安装 在vm12上安装正常 经过测试 1.需要在虚拟机硬件兼容性上选择12.x 2.版本也要选6.0,不要选6.X 其次,esxi要 ...

  9. Helm 安装 wordpress

    1. 前置需要安装 storageclass 然后 安装helm 客户端 helm tiller 服务端 2. 设置 当前的位阿里云的 repo 3. 查找 wordpress的镜像 helm sea ...

  10. pixi.js + three.js

    three.js    最好的webgl 3d渲染库之一, pixi.js    最好的webgl 2d渲染库之一,也许可以把之一去掉 两个库都很精简,如果把两个库结合起来,一定很爽很爽,你说是吧! ...