当前位置: 首页 > news >正文

中兴的网站谁做的网站开发技术发展历程

中兴的网站谁做的,网站开发技术发展历程,网站建设与网页制作盒子模型,做网络优化的公司排名GCDAsynSocket是一个开源的基于GCD的异步的socket库。它支持IPV4和IPV6地址#xff0c;TLS/SSL协议。同时它支持iOS端和Mac端。本篇主要介绍一下GCDAsynSocket中的TCP用法和实现。 首先通过下面这个方法初始化一个GCDAsynSocket对象。 - (id)initWithDelegate:(idGCDAsyn…GCDAsynSocket是一个开源的基于GCD的异步的socket库。它支持IPV4和IPV6地址TLS/SSL协议。同时它支持iOS端和Mac端。本篇主要介绍一下GCDAsynSocket中的TCP用法和实现。 首先通过下面这个方法初始化一个GCDAsynSocket对象。 - (id)initWithDelegate:(idGCDAsyncSocketDelegate)aDelegate delegateQueue:(dispatch_queue_t)dq socketQueue:(dispatch_queue_t)sq;这里面需要传入代理的对象代理队列以及socket队列。其中socket队列不能是一个并发的队列不然读写就乱了。同时为了防止socket队列死锁通过dispatch_queue_set_specific来为这个队列添加key值。 dispatch_queue_set_specific(socketQueue, IsOnSocketQueueOrTargetQueueKey, nonNullUnusedPointer, NULL);同时这里面初始化了readQueue、writeQueue数组和一个4K数据缓冲区后面读写的数据都会先经过这个缓冲区。 readQueue [[NSMutableArray alloc] initWithCapacity:5]; currentRead nil;writeQueue [[NSMutableArray alloc] initWithCapacity:5]; currentWrite nil;preBuffer [[GCDAsyncSocketPreBuffer alloc] initWithCapacity:(1024 * 4)];接着通过下面这个方法建立一个tcp连接 - (BOOL)connectToHost:(NSString *)hostonPort:(uint16_t)portviaInterface:(nullable NSString *)interfacewithTimeout:(NSTimeInterval)timeouterror:(NSError **)errPtr;你需要传入hostporttimeout等信息。其中interface是一个备用的port绝大多数情况下只需传nil。它会把里面的操作都放入上面的socketQueue中。 在这方法里面先做了一个地址检测。 NSMutableArray *addresses [[self class] lookupHost:hostCpy port:port error:lookupErr];同时在里面会做一个超时计时器超时时间为一开始传入的时间。 - (void)startConnectTimeout:(NSTimeInterval)timeout {if (timeout 0.0){connectTimer dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, socketQueue);__weak GCDAsyncSocket *weakSelf self;dispatch_source_set_event_handler(connectTimer, ^{ autoreleasepool {#pragma clang diagnostic push#pragma clang diagnostic warning -Wimplicit-retain-self__strong GCDAsyncSocket *strongSelf weakSelf;if (strongSelf nil) return_from_block;[strongSelf doConnectTimeout];#pragma clang diagnostic pop}});dispatch_time_t tt dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeout * NSEC_PER_SEC));dispatch_source_set_timer(connectTimer, tt, DISPATCH_TIME_FOREVER, 0);dispatch_resume(connectTimer);} }然后尝试去连接这个地址中间先会做一些ipv4地址和ipv6地址的转换接着会并发的发送connect()连接。一旦连接成功就会在didConnect方法中开启读写流连接。一旦进入didConnect方法就会关闭前面的超时计时器因为已经建立tcp握手连接。另外通过CFStreamCreatePairWithSocket的读写流连接也都是放在socketQueue中执行的。接着通过registerForStreamCallbacksIncludingReadWrite注册读写的回调。注册完之后会把读写放在一个cfstreamThread线程中进行执行并且在cfstreamThread加入了通过计时器激活的runloop用来不停的循环检测。 [strongSelf lookup:aStateIndex didSucceedWithAddress4:address4 address6:address6]; --[self connectSocket:socketFD address:address stateIndex:aStateIndex]; ----connect(socketFD, (const struct sockaddr *)[address bytes], (socklen_t)[address length]); ------[strongSelf didConnect:aStateIndex]; --------createReadAndWriteStream ----------CFStreamCreatePairWithSocket(NULL, (CFSocketNativeHandle)socketFD, readStream, writeStream); ------------registerForStreamCallbacksIncludingReadWrite --------------CFReadStreamSetClient(readStream, readStreamEvents, CFReadStreamCallback, streamContext) --------------CFWriteStreamSetClient(writeStream, writeStreamEvents, CFWriteStreamCallback, streamContext) ----------------startCFStreamThreadIfNeeded ------------------CFReadStreamScheduleWithRunLoop(asyncSocket-readStream, runLoop, kCFRunLoopDefaultMode); ------------------CFWriteStreamScheduleWithRunLoop(asyncSocket-writeStream, runLoop, kCFRunLoopDefaultMode);这样一个连接就建立了。如果连接建立就会回调到这个代理方法中。你可以在里面读写数据。 - (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port;一旦收到服务端返回的数据就会回调到这个方法。 - (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag;参考CocoaAsyncSocket
http://www.hkea.cn/news/14342869/

相关文章:

  • 住建网站需多少钱wordpress浮动音乐
  • 东莞优化网站制作广东省建设网官网
  • 做网站需要准备什么wordpress后台密码忘了
  • 兼职做效果图的网站九江城乡建设网站为什么打不开
  • 苏州免费模板建站论文收录网站
  • 济南企业建站排行榜专业网络推广平台
  • 手机和pc合一的网站建材 网站 模板
  • 艺纵网站建设网咯鸟深圳网站建设
  • 公众号开发是什么seo排名工具快速提高
  • 大连网站建站华文细黑做网站有版权吗
  • 个人可以做的外贸网站网站建设费是业务宣传费吗
  • 网站建设评分安徽省建设安全协会网站
  • 企业网站建设价格表网站公网安备链接怎么做
  • 南宁网站设计公司排名整合营销公司排名
  • 多说与网站账号绑定科技 响应式网站模板下载
  • 网站制作:网推宝|百度做邀请函好的网站
  • 做星座网站西安网络技术有限公司网站
  • 网站安全狗服务名北京注册公司地址有什么要求
  • 鹰潭网站设计外贸soho建站多少钱
  • 网站后台管理系统代码旅游网站的设计方案怎么做
  • 网站服务理念适合机械网站的wordpress主题模板
  • 淘宝联盟返利网站怎么做低成本做网站 百知
  • 哪个网站美丽乡村做的比较好衡阳两城区划定高风险区
  • 投资公司网站源码公司做网站费用计入什么科目
  • 电子政务网站建设背景宁波微网站开发
  • 利用ionic做的网站外贸网站平台都有哪些 免费的
  • 购物商城类网站备案软件工程技术学什么
  • 霸州网站建设nodejs搭建wordpress
  • 炫酷html5网站模板建站之星设计师
  • 怎么在网站后台删除图片网站规划问题