ASyncSocket库

2023-10-26

    iphone的标准推荐CFNetwork C库编程.但是编程比较烦躁。在其它OS往往用类来封装的对Socket函数的处理。比如MFC的CAsysncSocket.在iphone也有类似于开源项目.cocoa AsyncSocket库, 官方网站:http://code.google.com/p/cocoaasyncsocket/ 它用来简化CFnetwork的调用.

一.在项目引入ASyncSocket库

  1.下载ASyncSocket库源码

  2.把ASyncSocket库源码加入项目:只需要增加RunLoop目录中的AsyncSocket.h、AsyncSocket.m、AsyncUdpSocket.h和AsyncUdpSocket.m四个文件。

  3.在项目增加CFNetwork框架

       在Framework目录右健,选择Add-->Existing Files...    , 选择 CFNetwork.framework

二.TCP客户端

  1. 在controller头文件定义AsyncSocket对象

#import <UIKit/UIKit.h>

#import "AsyncSocket.h"

@interface HelloiPhoneViewController : UIViewController {

    UITextField    * textField;

    AsyncSocket * asyncSocket;

}

@property (retain, nonatomic) IBOutlet UITextField *textField;

- (IBAction) buttonPressed: (id)sender;

- (IBAction) textFieldDoneEditing: (id)sender;    

@end

  2.在需要联接地方使用connectToHost联接服务器

  其中initWithDelegate的参数中self是必须。这个对象指针中的各个Socket响应的函数将被ASyncSocket所调用.

    asyncSocket = [[AsyncSocket alloc] initWithDelegate:self]; 

    NSError *err = nil; 

    if(![asyncSocket connectToHost:host on:port error:&err]) 

    { 

        NSLog(@"Error: %@", err); 

    } 

3.增加Socket响应事件

     因为initWithDelegate把将当前对象传递进去,这样只要在当前对象方法实现相应方法.

4.关于NSData对象

    无论SOCKET收发都采用NSData对象.它的定义是 http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/Reference/Reference.html

   NSData主要是带一个(id)data指向的数据空间和长度 length.

    NSString 转换成NSData 对象

      NSData* xmlData = [@"testdata" dataUsingEncoding:NSUTF8StringEncoding];

 

   NSData 转换成NSString对象

   NSData * data;

   NSString *result = [[NSString alloc] initWithData:data  encoding:NSUTF8StringEncoding];

4.发送数据

     AsyncSocket  writeData    方法来发送数据,它有如下定义

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

以下是一个实例语句.

     NSData* aData= [@"test data" dataUsingEncoding: NSUTF8StringEncoding];

     [sock writeData:aData withTimeout:-1 tag:1];

 在onSocket重载函数,有如定义采用是专门用来处理SOCKET的发送数据的:

    -(void)onSocket(AsyncSocket *)sock didWriteDataWithTag:(long)tag

{

      NSLog(@"thread(%),onSocket:%p didWriteDataWithTag:%d",[[NSThread currentThread] name],

     sock,tag);

5.接收Socket数据.

    在onSocket重载函数,有如定义采用是专门用来处理SOCKET的接收数据的.

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

在中间将其转换成NSString进行显示.

    NSString* aStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

    NSLog(@"===%@",aStr); 

    [aStr release];

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASyncSocket库 的相关文章

随机推荐

  • uniapp组件深度修改样式问题

    问题一 样式类型scss less css 如果公共样式为common scss 对应的App vue文件必须加上lang scss 问题二 深入修改样式 当前页面修改 带scoped css样式
  • 系统安装部署系列教程(四):制作PE系统

    Win PE全程叫做Windows预安装系统 是Windows系统运行所必须的所有组件的最小集合 可能这么说大家感觉比较绕 简单来说 PE系统就是用来安装和修复系统的工具系统 最主要的作用就是用来重装系统 当然PE系统的作用并不是仅仅用来重
  • 【Unity 3D】VR飞机拆装后零件说明功能案例实战(附源码和演示视频 超详细)

    需要源码和资源包请点赞关注收藏后评论区留言私信 一 效果演示 如下图所示 飞机拆装后 单击零件 将会出现零件说明功能 看上去十分有科技感和美观 演示视频如下 零件高亮及显示说明 二 实现步骤 首先双击打开Level6 UI场景 接下来的步骤
  • 项目上线质量如何评估

    一 项目上线质量指标 你认为用什么质量指标可以反映项目 上线的一个质量 你可能会想那不是有很多质量指标么 多数和BUG相关 例如BUG数量 重新打开BUG数 BUG解决时长等等 好像都能体现上线质量啊 可仔细想想 我们衡量上线质量 不能只看
  • 【ML】AdaBoost:实用介绍及如何使用 Python 进行分类和回归

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • sdio tf卡基础知识总结

    sdio介绍 SDIO的全称是安全数字输入 输出接口 一般都是用来SD卡 SD I O 卡 MMC卡进行通讯 SDIO总线拥有9根线 一个CLK时钟线 四条DATA双向数据线 一条双向指令线CMD VDD VSS1 VSS2电源和地信号线
  • GIT常用命令

    文章目录 前言 一 必备命令 rebase 变基 merge branch reset revert 二 将本地项目推送到远程 总结 问题 references 前言 当前工作区 add gt stage commit gt 本地仓库 pu
  • [SDOI2007]游戏【哈希+DAG拓扑】

    题目链接 先通过哈希确定点 这里我使用的是双值哈希 然后利用哈希判断可以和前面的出现的点如何链接 之后构造出来的图一定是一副DAG图 有向无环图 所以直接拓扑排序DP即可 include
  • 图解通信原理与案例分析-29:埃隆.马斯克的“星链”Starlink计划是卫星语音通信向卫星互联网的演进

    埃隆 马斯克一个值得技术人员尊敬的科技狂人 他把现实 科幻 理想 情怀 未来有机的融合在了一起 他有很多伟大的 革命性的构想与实现 星链 Starlink计划就是其中之一 本文就从通信的角度解读一下这个看似不可思议的计划 目录 第1章 什么
  • 618京东预售一般便宜多少?跟直接买有啥区别?

    618京东预售一般便宜多少 跟直接买有啥区别 京东作为消费者比较喜欢的电商购物平台之一 经常会推出促销打折的活动 以吸引用户到平台上购物 在这些大促活动中 平台会在预售环节设置专属的优惠 让消费者下单提前锁定这些折扣 一般这种情况能便宜多少
  • Vue模板语法:插值语法和指令语法

    div h1 插值语法 h1 h3 你好 name h3 hr h1 指令语法 h1 a 点我去 school name a a 点我去百度 a div
  • Array.prototype.slice.call()方法详解

    slice 用来截取截取字符串方法 Array javascript的一个引用类型 其原型prototype上有一个方法叫slice call和apply 用来改变对象中函数内部的this引用 使得函数可以随便换 妈妈 为什么不直接用 ar
  • TCP/IP协议,HTTP协议,get和post请求的关联与区别

    TCP IP协议 TCP IP Transmission Control Protocol Internet Protocol 传输控制协议 网际协议 它是在网络使用中最基本的通信协议 TCP IP协议不仅仅指的是TCP 和IP两个协议 而
  • ubuntu安装ROS

    ubuntu安装ROS 参考文章 http wiki ros org noetic Installation Ubuntu 1 设置ubuntu接受来自packages ros org的安装 sudo sh c echo deb http
  • java 开发笔记(2)

    文章目录 写在前面 1 字段与字符串 1 1 判断对象是否为空 1 2 字段名转换 驼峰命名转大写下划线命名 1 3 获取某个实体的字段列表 2 sql mybatis jdbc 2 1 获取随机数据 2 2 sqlSessionFacto
  • 新闻列表案例(前端html,css)

    去掉列表默认的样式 无序和有序列表前面默认的列表样式 在不同浏览器显示效果不一样 而且也比较难看 所以 我们一般上来就直接去掉这些列表样式就行了 li list style none 代码如下
  • 看spring cloud开源项目Pig的云踩坑记

    最近看到一个有趣的开源项目pig 主要的技术点在认证授权中心 spring security oauth zuul网关实现 Elastic Job定时任务 趁着刚刚入门微服务 赶快写个博客分析一下 此篇文章主要用于个人备忘 如果有不对 请批
  • 汇编语言如何输出结果_量子计算遇上高性能计算系列(五)初识量子汇编语言...

    汇编语言是直接工作在硬件之上的最底层的编程语言 众所周知 计算机中所有的数据和指令都是由0和1组成的 例如 01010000 机器指令在CPU上运行的时候就是一组电平脉冲信号 而01010000对于人们来讲太难理解 因此 就产生出更加便于人
  • react做表格和分页功能

    import React memo useState useEffect from react import Table Pagination from antd import IDefaultParam from topFilter to
  • ASyncSocket库

    iphone的标准推荐CFNetwork C库编程 但是编程比较烦躁 在其它OS往往用类来封装的对Socket函数的处理 比如MFC的CAsysncSocket 在iphone也有类似于开源项目 cocoa AsyncSocket库 官方网