IOS socket基于tcp/udp的通信
2016-05-03 11:24
579 查看
网络上已经有编写好的开源类库GCDAsyncSocket 和GCDAsyncUdpSocket
这是GCD版的 比AsyncSocket 和AsyncUdpSocket估计要好用点用法也很简单,跟http很类似 只要指定服务器的ip和端口然后再实现各种回调就行,原生态实现正在摸索。。。。。socket默认情况下就是采用TCP协议,创建之后通信双方的socket会一直保持连接,除非手动close或因为网络原因close,所以,此种状况对服务器而言是有一定资源消耗的,这种模式只适应与对服务器小规模的访问,特别是对于实时性很高的应用,如视频直播、呼叫系统等,而http一般都是短连接的,一次请求完之后客户端便会于服务端端开连接
http是凌驾于socket之上的高级协议,而socket是比较底层的通讯方式,只是建立了一个连接通道,具体上面传输什么样的数据,按照什么格式传输,需要你自己定义,所以这就需要重新编写定义服务端与客户端的所应遵循的规定,而http已经被前人们定义使用过了
先去github的网站下载最新的包,然后先看看介绍。写的比较详细了
https://github.com/robbiehanson/CocoaAsyncSocket/
网上很多都是老版本的帖子。官方已经推出了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结构编程,连接过程
服务器端监听某个端口是否有连接请求。服务器端程序处于堵塞状态,直到客户端向服务器端发出连接请求,服务器端接受请求程序才能向下运行。一旦连接建立起来,通过Socket可以获得输入输出流对象。借助于输入输出流对象就可以实现与客户端的通讯,最后不要忘记关闭Socket和释放一些资源(包括:关闭输入输出流)。
客户端流程是先指定要通讯的服务器IP地址、端口和采用的传输协议(TCP或UDP),向服务器发出连接请求,服务器有应答请求之后,就会建立连接。之后与服务器端是一样的了。
在iOS中,客户端Socket编程可以使用的技术有三种:
1 使用NSStream。面向Objective-C语言的实现,由苹果提供的Foundation框架提供的API;
2 使用CFStream。面向C语言的实现,由苹果提供的Core Foundation框架提供的API;
BSD Socket。也叫伯克利套接字(Berkeley Socket),是Unix平台下广泛使用的Socket编程。它是面向C语言实现的,完全使用C编写,使用起来比较麻烦。它是伯克利加州大学(University of California, Berkeley)的学生开发的。
在iOS中,服务器端Socket编程可以使用技术有二种:
1 使用CFStream。面向C语言的实现,由苹果提供的Core Foundation框架提供的API;
2 BSD Socket。也叫伯克利套接字(Berkeley Socket),是Unix平台下广泛使用的Socket编程。它是面向C语言实现的,完全使用C编写的,使用起来比较麻烦。它是伯克利加州大学(University of California, Berkeley)的学生开发的。
这是GCD版的 比AsyncSocket 和AsyncUdpSocket估计要好用点用法也很简单,跟http很类似 只要指定服务器的ip和端口然后再实现各种回调就行,原生态实现正在摸索。。。。。socket默认情况下就是采用TCP协议,创建之后通信双方的socket会一直保持连接,除非手动close或因为网络原因close,所以,此种状况对服务器而言是有一定资源消耗的,这种模式只适应与对服务器小规模的访问,特别是对于实时性很高的应用,如视频直播、呼叫系统等,而http一般都是短连接的,一次请求完之后客户端便会于服务端端开连接
http是凌驾于socket之上的高级协议,而socket是比较底层的通讯方式,只是建立了一个连接通道,具体上面传输什么样的数据,按照什么格式传输,需要你自己定义,所以这就需要重新编写定义服务端与客户端的所应遵循的规定,而http已经被前人们定义使用过了
先去github的网站下载最新的包,然后先看看介绍。写的比较详细了
https://github.com/robbiehanson/CocoaAsyncSocket/
网上很多都是老版本的帖子。官方已经推出了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结构编程,连接过程
服务器端监听某个端口是否有连接请求。服务器端程序处于堵塞状态,直到客户端向服务器端发出连接请求,服务器端接受请求程序才能向下运行。一旦连接建立起来,通过Socket可以获得输入输出流对象。借助于输入输出流对象就可以实现与客户端的通讯,最后不要忘记关闭Socket和释放一些资源(包括:关闭输入输出流)。
客户端流程是先指定要通讯的服务器IP地址、端口和采用的传输协议(TCP或UDP),向服务器发出连接请求,服务器有应答请求之后,就会建立连接。之后与服务器端是一样的了。
在iOS中,客户端Socket编程可以使用的技术有三种:
1 使用NSStream。面向Objective-C语言的实现,由苹果提供的Foundation框架提供的API;
2 使用CFStream。面向C语言的实现,由苹果提供的Core Foundation框架提供的API;
BSD Socket。也叫伯克利套接字(Berkeley Socket),是Unix平台下广泛使用的Socket编程。它是面向C语言实现的,完全使用C编写,使用起来比较麻烦。它是伯克利加州大学(University of California, Berkeley)的学生开发的。
在iOS中,服务器端Socket编程可以使用技术有二种:
1 使用CFStream。面向C语言的实现,由苹果提供的Core Foundation框架提供的API;
2 BSD Socket。也叫伯克利套接字(Berkeley Socket),是Unix平台下广泛使用的Socket编程。它是面向C语言实现的,完全使用C编写的,使用起来比较麻烦。它是伯克利加州大学(University of California, Berkeley)的学生开发的。
相关文章推荐
- python-网络:原始套接字和流量嗅探
- 【TCP/IP】路由选择之TTL
- Taglist: Exuberant ctags (http://ctags.sf.net) not found in PATH. Plugin is not loaded.
- 一根网线的风波
- iOS中 HTTP/Socket/TCP/IP通信协议详解
- iOS TCP通讯
- TCP/IP协议 卷一 -----------广播和多播
- LR 录制Web(HTTP/HTML)脚本的模式选择
- Java使用HTTPClient4.3开发的公众平台消息模板的推送功能
- An error occurred at line: 307 in the generated java file The code of method _jspService (HttpServle
- Volley网络请求框架的使用
- UnityEditor.AsyncHTTPClient:Done(State, Int32)异常处理
- SVN 错误:Error validating server certificate for 'https://xxxxxxx':443... Mac os svn客户端证书验证缓存 解决
- HTTP POST请求报文格式分析与Java实现文件上传
- MAPI over HTTP和RPC over HTTP的区别
- JAVA: Socket和ServerSocket网络编程
- HttpURLconnection上传数据
- 聊聊HTTPS和SSL/TLS协议
- 聊聊HTTPS和SSL/TLS协议
- 聊聊HTTPS和SSL/TLS协议