IOS socket基于tcp/udp的通信

来源:互联网 发布:淘宝左岸时光paris 编辑:程序博客网 时间:2024/05/16 08:26
网络上已经有编写好的开源类库GCDAsyncSocket 和GCDAsyncUdpSocket  这是GCD版的  比AsyncSocket 和AsyncUdpSocket估计要好用点 用法也很简单,跟http很类似  只要指定服务器的ip和端口 然后再实现各种回调就行,原生态实现正在摸索。。。。。socket默认情况下就是采用TCP协议,创建之后通信双方的socket会一直保持连接,除非手动close或因为网络原因close,所以,此种状况对服务器而言是有一定资源消耗的,这种模式只适应与对服务器小规模的访问,特别是对于实时性很高的应用,如视频直播、呼叫系统等,而http一般都是短连接的,一次请求完之后客户端便会于服务端端开连接
   http是凌驾于socket之上的高级协议,而socket是比较底层的通讯方式,只是建立了一个连接通道,具体上面传输什么样的数据,按照什么格式传输,需要你自己定义,所以这就需要重新编写定义服务端与客户端的所应遵循的规定,而http已经被前人们定义使用过了

先去github的网站下载最新的包,然后先看看介绍。写的比较详细了

https://github.com/robbiehanson/CocoaAsyncSocket/wiki/Intro_GCDAsyncSocket

网上很多都是老版本的帖子。官方已经推出了GCDAsyncSocket来代替以前老的AsyncSocket。

我的项目是no-ARC的,这个框架只有arc的版本。所以引入GCDAsyncSocket的.h和.m文件后,修改xcode中项目的属性。

1)targets中“build settings”中找到Compiler for c/c++/Objective-c的选项。改为Apple LLVM compiler 3.0 只要是3.0或以上就可以

2)在“build phases”中“compile sources”中找到GCDAsyncSocket.m,增加参数-fobj-arc

3)引入GCDAsyncSocket所需要的框架,CFNetwork和security这两个



知识补充:

使用Socket进行C/S结构编程,连接过程

 1

服 务器端监听某个端口是否有连接请求。服务器端程序处于堵塞状态,直到客户端向服务器端发出连接请求,服务器端接受请求程序才能向下运行。一旦连接建立起 来,通过Socket可以获得输入输出流对象。借助于输入输出流对象就可以实现与客户端的通讯,最后不要忘记关闭Socket和释放一些资源(包括:关闭 输入输出流)。

客户端流程是先指定要通讯的服务器IP地址、端口和采用的传输协议(TCP或UDP),向服务器发出连接请求,服务器有应答请求之后,就会建立连接。之后与服务器端是一样的了。

在iOS中,客户端Socket编程可以使用的技术有三种:

使用NSStream。面向Objective-C语言的实现,由苹果提供的Foundation框架提供的API;

使用CFStream。面向C语言的实现,由苹果提供的Core Foundation框架提供的API;

BSD Socket。 也叫伯克利套接字(Berkeley Socket),是Unix平台下广泛使用的Socket编程。它是面向C语言实现 的,完全使用C编写,使用起来比较麻烦。它是伯克利加州大学(University of California, Berkeley)的学生开发的。

在iOS中,服务器端Socket编程可以使用技术有二种:

使用CFStream。面向C语言的实现,由苹果提供的Core Foundation框架提供的API;

BSD Socket。 也叫伯克利套接字(Berkeley Socket),是Unix平台下广泛使用的Socket编程。它是面向C语言实 现的,完全使用C编写的,使用起来比较麻烦。它是伯克利加州大学(University of California, Berkeley)的学生开发 的。