iOS项目开发之Socket编程

有一段时间没有认真总结和写博客了

  前段时间找工作、进入工作阶段。比较少静下来认真总结,现在静下心来总结一下最近的一些心得

  前言

  AsyncSocket介绍

  AsyncSocket详解

  AsyncSocket示例

  一、前言

  公司的项目用到了Socket编程,之前在学习的过程当中,用到的更多的还是http请求的方式。但是既然用到了就必须学习一下,所以就在网上找一些例子,然后想自己写一个demo。可是发现很多写iOS Socket的博客并没有很详细的说明,也可能是大神们觉得其他东西都浅显易懂。

  自己专研了一下,将自己的一些理解总结出来,一方面整理自己的学习思路,另一方面,为一些和我有同样困惑的小伙伴们,稍做指引。

  二、AsyncSocket介绍

  1)iOS中Socket编程的方式有哪些?

  -BSD Socket

  BSD Socket 是UNIX系统中通用的网络接口,它不仅支持各种不同的网络类型,而且也是一种内部进程之间的通信机制。而iOS系统其实本质就是UNIX,所以可以用,但是比较复杂。

  -CFSocket

  CFSocket是苹果提供给我们的使用Socket的方式,但是用起来还是会不太顺手。当然想使用的话,可以细细研究一下。

  -AsyncSocket

  这次博客的主讲内容,也是我们在开发项目中经常会用到的。

  2)为什么选择AsyncSocket?

  iphone的CFNetwork编程比较艰深。使用AsyncSocket开源库来开发相对较简单,帮助我们封装了很多东西。

  三、AsyncSocket详解

  1??说明

  在我们开发当中,我们主要的任务是开发客户端。所以详解里主要将客户端的整个连接建立过程,以及在说明时候回调哪些函数。在后面的示例代码中,也会给出服务器端的简单开发。

  2??过程详解

  1.建立连接

  - (int)connectServer:(NSString *)hostIP port:(int)hostPort

  2.连接成功后,会回调的函数

  - (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port

  3.发送数据

  - (void)writeData:(NSData *)data withTimeout:(NSTimeInterval)timeout tag:(long)tag;

  4.接受数据

  -(void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag

  5.断开连接

  - (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err

  - (void)onSocketDidDisconnect:(AsyncSocket *)sock

  主要就是上述的几个方法,只是说在真正开发当中,很可能我们在收发数据的时候,我们收发的数据并不仅仅是一个字符串包装成NSData即可,我们很可能会发送结构体等类型,这个时候我们就需要和服务器端的人员协作来开发:定义怎样的结构体。

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-08-01 12:53:45

iOS项目开发之Socket编程的相关文章

《iOS 9 开发指南》——第1章,第1.2节开始iOS 9开发之旅

1.2 开始iOS 9开发之旅iOS 9 开发指南图片 2 知识点讲解:光盘:视频知识点第1章开始iOS 9开发之旅.mp4要想成为一名iOS开发人员,首先需要拥有一台Intel Macintosh台式机或笔记本电脑,并运行苹果的操作系统.对于iOS 9开发人来说,需要安装最新的OS X El Capitan系统.硬盘至少有6GB的可用空间,开发系统的屏幕空间越大,就越容易营造高效的工作空间.对于广大读者来说,还是建议购买一台Mac机器,因为这样的开发效率更高,也避免一些因为不兼容所带来的调试错

C#开发之Socket网络编程TCP/IP层次模型、端口及报文等探讨_C#教程

1.TCP/IP层次模型 当然这里我们只讨论重要的四层 01,应用层(Application):应用层是个很广泛的概念,有一些基本相同的系统级TCP/IP应用以及应用协议,也有许多的企业应用和互联网应用.http协议在应用层运行. 02,传输层(Tanspot):传输层包括UDP和TCP,UDP几乎不对报文进行检查,而TCP提供传输保证. 03,网络层(Netwok):网络层协议由一系列协议组成,包括ICMP.IGMP.RIP.OSPF.IP(v4,v6)等. 04,链路层(Link):又称为物

专访实战专家,揭秘iOS神奇开发之路

专访实战专家,揭秘iOS神奇开发之路 转自:http://www.ciitn.com/archive/5533.html 中国信息产业培训网主编专访业内知名实战专家.安博教育-中程在线金牌讲师关东升老师 时间:2012-03-29 10:59来源:未知 作者:xinglu点击: 164 次 在现今的移动互联网时代,苹果产品风靡全球.因此,相应的iOS开发也渐渐成为IT业界热门的职业方向.除了可以给开发人员带来高薪的职位,还能够为个人创造可以盈利的开发模式,对此,中国信息产业培训网主编专访业内知名

搜芽项目开发之SVN协作流程

我想让你们提交一下代码,然后我回去看了一下 seller的提交,发现没有成浩的代码,后来我发现他在上一级目录找到他的代码了. 如下图所示:本应该是在seller目录下的,而不应该另开目录.所以我再这里讲一下你们如何使用svn提交代码.我用命令行来讲, 我也不是很精通,会用,懂流程能协作开发就好.见图后: 首先,我们分情况: 1,我写了一个项目,服务器也从来没有这个项目的代码(我干的活,eg seller)怎么办. 如我要以下图目录作为源码,想在服务器给它开个分支.(这个目录现在已经提交了,我们先

android网游开发之socket的简单设计和实现

对于普通应用的网络模块一般使用http文本协议,在android开发中使用http协议比较简单,sdk已经做了很好的封装了,具体使用方法可以参考我的这篇博文.而在游戏开发中,可以结合使用http和socket,当然了http协议底层也是基于tcp协议的.http协议是无连接.无状态的,每次连接只能处理一个请求,然后就断了,而且发一个请求需要附加额外信息(请求行.请求头),每次请求都需要重新建立连接:使用socket的好处是更高效和省流量,建立一次连接后,只要不手动或者出现异常断开,就可以一直互相

网游开发之socket的简单设计

对于普通应用的网络模块一般使用http文本协议,在android开发中使用http协议比较简单,sdk已经做了很好的封装了,具体使用方法可以参考我的这篇博文.而在游戏开发中,可以结合使用http和socket,当然了http协议底层也是基于tcp协议的.http协议是无连接.无状态的,每次连接只能处理一个请求,然后就断了,而且发一个请求需要附加额外信息(请求行.请求头),每次请求都需要重新建立连接:使用socket的好处是更高效和省流量,建立一次连接后,只要不手动或者出现异常断开,就可以一直互相

iOS应用开发之Persistence持久化[转]

持久化(Persistence) 持久化(Persistence)意思就是当你退出app的时候它还会存在.NSUserDefaults就是一个非常简单的持久化方案,不过这有限制,它只能是很小的东西,通常是些用户选项. 如何把那些大数据的东西持久化? 第一个方法,把东西持久化的第一个简单的方式有点像用NSUserDefaults里的property list来实现的进化版,property list是我们自定义的一个概念,是NSArray.NSDictionary.NSNumber.NSStrin

Android开发之Socket通信传输简单示例

本文实例讲述了Android Socket通信传输实现方法.分享给大家供大家参考,具体如下: 1.开篇简介 Socket本质上就是Java封装了传输层上的TCP协议(注:UDP用的是DatagramSocket类).要实现Socket的传输,需要构建客户端和服务器端.另外,传输的数据可以是字符串和字节.字符串传输主要用于简单的应用,比较复杂的应用(比如Java和C++进行通信),往往需要构建自己的应用层规则(类似于应用层协议),并用字节来传输. 2.基于字符串传输的Socket案例 1)服务器端

Android项目开发之UI设计器_Android

开发人员可以用以下两种方式声明UI:一是通过.xml文件(不带预览界面)或者.axml文件(带预览界面)来描述:二是用C#代码实现.  用.axml文件描述用户界面(UI)时,设计器分为[设计]视图和[源]视图.这种方式的优点是:可以尽可能地把表现与控制行为的代码分隔开.就是说,可以直接修改XML而不需要重新编译.另外,还可以让UI结构可视化以及调试都变得更容易. 1.布局文件(.xml和.axml)  在XML中声明UI之后,必须将其以.xml扩展名或者.axml扩展名保存在Android项目