




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是 一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让 Socket去组织数据,以符合指定的协议。一个生活中的场景。你要打电话给一个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就 建立起了连接,就可以讲话了。等交流结束,挂断电话结束此次交谈。 先从服务器端说起。1服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调 用accept阻塞,等待客户端连接。2在这时如果有个客户端初始
2、化一个Socket,然后连接服务器(connect),3如果 连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后arc=send(fd,szText,cnt,0);把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。在客户端输入服务器端的IP地址和发送的数据,然后按发送按钮,服务器端接收到数据,然后回应客户端。 客户端读取回应的数据,显示在界面上。在服务器端,主要是启动Socket和监听线程。服务器端一直在监听是否有客户端连接,如有连
3、接,处理客户端的请求,给出回应,然后继续监听。客户端:苹果iso开发: socket tcp/ip 的通讯使用方法如下: 1、创建工程。 2、把AsyncSocket添加到项目中。 3、添加CFNetwork.framework到工程中。 4、实现测试类: #import #import AsyncSocket.h interface iphone_socketViewController : UIViewController AsyncSocket *asyncSocket; endIOS socket基于tcp/udp的通信 分类: ios开发 2013-12-03 15:10 1399人
4、阅读 评论(0) 收藏 举报 ios通信socket苹果网络上已经有编写好的开源类库GCDAsyncSocket 和GCDAsyncUdpSocket这是GCD版的比AsyncSocket 和AsyncUdpSocket估计要好用点 用法也很简单,跟http很类似只要指定服务器的ip和端口 然后再实现各种回调就行,原生态实现正在摸索。socket 默认情况下就是采用TCP协议,创建之后通信双方的socket会一直保持连接,除非手动close或因为网络原因close,所以,此种状况对服务器而 言是有一定资源消耗的,这种模式只适应与对服务器小规模的访问,特别是对于实时性很高的应用,如视频直播、呼叫
5、系统等,而http一般都是短连接的,一次 请求完之后客户端便会于服务端端开连接http是凌驾于socket之上的高级协议,而socket是比较底层的通讯方式,只是建立了一个连接通道,具体上面传输什么样的数据,按照什么格式传输,需要你自己定义,所以这就需要重新编写定义服务端与客户端的所应遵循的规定,而http已经被前人们定义使用过了先去github的网站下载最新的包,然后先看看介绍。写的比较详细了网上很多都是老版本的帖子。官方已经推出了GCDAsyncSocket来代替以前老的AsyncSocket。我的项目是no-ARC的,这个框架只有arc的版本。所以引入GCDAsyncSocket的.h和
6、.m文件后,修改xcode中项目的属性。1)targets中“buildsettings”中找到CompilerforccObjectivec的选项。改为AppleLLVMcompiler3.0只要是3.0或以上就可以2)在“buildphases”中“compilesources”中找到GCDAsyncSocket.m,增加参数-fobj-arc3)引入GCDAsyncSocket所需要的框架,CFNetwork和security这两个通讯http,TCP/IP与socket之间的区别1、TCP/IP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建
7、立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。建立起一个TCP连接需要经过“三次握手”:第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYNACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。握手过程中传送的包里不包含数据
8、,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客户端交互,最终确定断开).2、HTTP连接HTTP协议即超文本传送协议(HypertextTransferProtocol),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连
9、接到关闭连接的过程称为“一次连接”。3.1套接字(socket)概念套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。3.2建立socket连接建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket,另一个运行于服务器端,称为ServerSocket。套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。服务器监听:服务器端套接字并不定位具体的客户端套
10、接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。4、SOCKET连接与TCP/IP连接创建Socket连接时,可以
11、指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。5、Socket连接与HTTP连接很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步。此时若双方建立的是Socket连接,服务器就可以直接将数据传送给客户端;若双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端,因此,客户端定时向服务器端发送连接请求,不仅可以保持在线,同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。http协议是应用层的协义一个是发动机(Socket),
12、提供了网络通信的能力一个是轿车(Http),提供了具体的方式两个计算机之间的交流无非是两个端口之间的数据通信,具体的数据会以什么样的形式展现是以不同的应用层协议来定义的如HTTPFTP.socket是对端口通信开发的工具,它要更底层一些 .get和post这是http协议的两种方法,另外还有head,delete等这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串。post的参数是通过另外的流传递的,不通过url,所以可以很大,也可以传递二进制数据,如文件的上传。在servlet开发中,TCP/IP、Http、Socket的区别通过初步的了解,我知道
13、IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,”而我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。通过Socket,我们才能使用TCP/IP协议。实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、listen、connect、accept、sen
14、d、read和write等等。网络有一段关于socket和TCP/IP协议关系的说法比较容易理解:“TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。CSDN上有个比较形象的描述:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。1、服务器监听:服务器端套接字并不定
15、位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。2、客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。3、连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。三、HTTP链接的特点HTTP协议即超文本
16、传送协议(Hypertext Transfer Protocol ),是Web联四、TCP和UDP的区别(考得最多。快被考烂了我觉得- -)1、TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。2、也正由于1所说的特点,使得UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UD
17、P的实时性更好。知道了TCP和UDP的区别,就不难理解为何采用TCP传输协议的MSN比采用UDP的QQ传输文件慢了,但并不能说QQ的通信是不安全的,因为程序员可以手动对UDP的数据收发进行验证,比如发送方对每个数据包进行编号然后由接收方进行验证啊什么的,即使是这样,UDP因为在底层协议的封装上没有采用类似TCP的“三次握手”而实现了TCP所无法达到的传输效率。iOS应用是非常注重用户体验的,不光是要求界面设计合理美观,也要求各种UI的反应灵敏,我相信大家对那种一拖就卡卡卡的 TableView 应用没什么好印象。还记得12306么,那个速度,相信大家都受不了。为了提高 iOS 的运行速度,下面
18、我将抛砖引玉介绍一些我实践过的用来提供iOS程序运行效率的方法,与大家分享,希望能得到更多的反馈和建议。1,计算代码运行时间:相信数据,不要太相信感觉。2,善用性能分析工具。4 不要使用太多的Xib xib编译速度慢,有个将xib转化为代码的过程5. 对于 TableView,重用 cell;减少 cell 初始化的工作量,延迟装载;6. 在线程中使用 autoreleasepool。7,将一些不太重要的任务放在 idle 时运行。8,不要在 viewWillAppear 中做费时的操作。9,使用多线程来延迟加载资源。占位,异步,主线程10 利用 cache 空间换时间。cache 是一种常见
19、的空间换时间的提供性能的收到,可以用在相当多的场合。iOS6,7的时间1.按照传统 新版IOS会随着新版IOS设备一起出现,也就是下个月发布的全新iphone,但是在6月苹果召开大会的时候已经放出了ios6的bate版,如果你有开发者账号,便可以更新到最新的测试版,如果没有下个月也势必可以等到正式版IOS6iOS6新特性 每次ios大版本的更新,都会带来一些新的东西,对开发者来说,有利有弊。 好处是,新增了很多新的属性,控件和api,开发者权限更大了,可以轻松实现更多的功能。弊端在于,可能废除了一些旧的api接口,需要做更多的适配和兼 容。通过自己开发过程中的一些经验,查阅ios6 SDK以及
20、参考网上一些文档。 总结了下面这些关于ios6系统的新特性,方便大家在后续开发过程中进行对比参考。一 关于内存警告 ios6中废除了viewDidUnload,viewWillUnload这两个系统回调, 收到内存警告时在didReceiveMemoryWarning中进行相关的处理。二 关于屏幕旋转 同样ios6 废除了shouldAutorotateToInterfaceOrientation这个旋转屏幕的设置接口。 必须在两个新接口中设置旋转属性:shouldAutorotatesupportedInterfaceOrientations收到旋转事件后的处理,同样在willRotateT
21、oInterfaceOrientation,和didRotateFromInterfaceOrientation中进行。三 UISwitch ios6下,新增了以下几个属性,可以设置开关的颜色以及背景图property ( nonatomic , retain ) UIColor*tintColor; property ( nonatomic , retain ) UIColor*thumbTintColor; property ( nonatomic , retain ) UIImage*onImage; property ( nonatomic , retain )UIImage *off
22、Image; 四 UINavigationBar ios6新增了,设置阴影图片的属性property ( nonatomic , retain ) UIImage*shadowImage; 五 UIImage 可以在ios6下设置图片的scale比例尺寸了+ (UIImage *)imageWithData:(NSData *)data scale:(CGFloat)scale;- ( id )initWithData:(NSData *)data scale:(CGFloat)scale; 六 UIRefreshControl 之前苹果官方是没有现成的下拉刷新的控件,都是自己实现或者使用比较
23、成熟的开源库。 这次,ios6 苹果加入了UIRefreshControl,配合UITableView直接实现下拉刷新。但是为了保证兼容性, 还是不推荐目前使用这个控件。七UICollectionView 全新的集合控件, 应用场景有类似照片墙,瀑布流等。Github里之前已经有很多开源库实现了这个控件的功能。iOS7新特性全新UI设计 iOS7最大的变化莫过于UI设计,也许你会说UI设计“这是设计师大大们应该关注的事情,不关开发者的事,我们只需要替换图片就行了”。那你就错了。 UI的变化必然带来使用习惯和方式的转变,如何运用iOS7的UI,如何是自己的应用更切合新的系统,都是需要考虑的事情。另外值得注意的是,使用 iOS7 SDK(现在只有Xcode5预览版提供)打包的应用在iOS7上运行时将会自动使用iOS7的新界面,所以原有应用可能需要对新界面进
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025企业标准租车协议范本
- 公司工作流程管理制度
- 公司环境体系管理制度
- 湖南省长沙麓山国际实验学校2025届高三下学期二模英语试卷(含答案无听力音频及听力原文)
- 福建省龙岩市2024~2025学年 高二下册第二次月考(3月)数学试卷附解析
- 2025年中考语文(长沙用)课件:主题4 寻访家乡文化讲好家乡故事综合实践活动
- 雨水用水量径流控制计算书
- 2025届安徽省宣城市宁国市中考二模数学试卷含答案
- 2024年南充市顺庆区考调真题
- 西安工程大学招聘笔试真题2024
- GB/T 5288-2007龙门导轨磨床精度检验
- 检验科梅毒快速检测室内质控记录本
- GB/T 1094.2-2013电力变压器第2部分:液浸式变压器的温升
- 2023年庄河市中医医院医护人员招聘笔试题库及答案解析
- 《社会保障概论》课程教学大纲(本科)
- 温州市住宅小区(大厦)物业服务达标考核实施暂行办法
- 《行政法与行政诉讼法》期末复习题及参考答案
- 北京市教育系统
- 《科学技术史》课程课件(完整版)
- 超星尔雅学习通《大学生创业基础》章节测试含答案
- 第四节-酸碱平衡失常的诊治课件
评论
0/150
提交评论