IOS学习笔记之 Socket 编程
本文转载至 http://www.tuicool.com/articles/RNFRva
时间 2014-12-07 12:48:00 博客园-原创精华区原文 http://www.cnblogs.com/chengzi/p/4149242.html
最近开始静心学习IOS编程,虽然起步有点晚,但有句话说的好:“如果想去做,任何时候都不晚”。所以在今天,开始好好学习IOS。(本人之前4年都是搞.Net的,java也培训过一年)
打算学IOS,从哪入手呢?给大家推荐两本入门书吧《Beginning iOS 7 Development》、《Objective-C.程序设计(第4版)》,正好两只手,一手一本。
但是我学习都是先学习基础、理论,但是动手做的时候不要对着书上的例子去学那几个控件的用法,掌握不了所有的,不如用的时候去帮助文档看看用法。即使学会了也只会那几个控件的那几个属性而已,最好是想一个小项目,然后自然而然的就用到了所有控件。
所以今天想编一个socket的例子,虽然简单,但是在做的时候还是遇到了不少小麻烦。
编码前的准备工作:
我是用的xcode6,所以准备socket库的时候使用了支持ARC的GCDAsyncSocket
1、到网上下载GCDAsyncSocket 地址: CocoaAsyncSocket/GCD at master · robbiehanson/CocoaAsyncSocket · GitHub
2、服务器端代码(我已经用.NET写了个简单的)
运行效果:
直接贴上后台代码了:
1、头文件
#import <UIKit/UIKit.h> #import "GCDAsyncSocket.h"@interface ViewController : UIViewController { NSString *host; uint16_t port; GCDAsyncSocket *socket; } @property NSTimeInterval socketTimeOut; @property (weak, nonatomic) IBOutlet UILabel *txtTitle; @property (weak, nonatomic) IBOutlet UIButton *btnClickMe; @property (weak, nonatomic) IBOutlet UITextField *txtQQ; @property (weak, nonatomic) IBOutlet UITextField *txtPwd; @property (weak, nonatomic) IBOutlet UISlider *sldValue; @property (weak, nonatomic) IBOutlet UIButton *btnConnectSocket; @property (weak, nonatomic) IBOutlet UILabel *lblSocketStatus; @property (weak, nonatomic) IBOutlet UIButton *btnSendMsg; - (IBAction)btnClickMe_Click:(id)sender; - (IBAction)txtPwd_DoneEditing:(id)sender; - (IBAction)sldValue_Changed:(id)sender; - (IBAction)btnConnectSocket_click:(id)sender; - (IBAction)btnSendMsg_Click:(id)sender;
2、m文件变量初始化
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. host = @"192.168.1.103"; port = 52710; self.socketTimeOut = 100; }
3、链接服务器
//链接socket服务器按钮单击事件 - (IBAction)btnConnectSocket_click:(id)sender { _lblSocketStatus.text = host; socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; socket.delegate = self; NSError *err = nil; BOOL connState=[socket connectToHost:host onPort:port error:&err]; if(!connState) { _lblSocketStatus.text = [_lblSocketStatus.text stringByAppendingString:err.description ]; } else { NSLog(@"连接服务器:%@ 成功",host); } }
4、发送信息
//发送信息单击事件 - (IBAction)btnSendMsg_Click:(id)sender {[socket writeData:[_txtQQ.text dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:0];NSLog(@"发送的QQ号码:%@",_txtQQ.text);[socket readDataWithTimeout:self.socketTimeOut tag:0]; }
这里还调用了
readDataWithTimeout 方法来读取服务器返回的信息
5、接收信息
//读取服务器获取的数据
-(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
NSString *newMessage = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"接收到服务器返回的信息:%@",newMessage);
[socket readDataWithTimeout:self.socketTimeOut tag:0];
}
到此就完成了简单的socket收发信息,可以自己再加工加工完成一个简单的IM小项目了。
转载于:https://www.cnblogs.com/Camier-myNiuer/p/4150193.html
IOS学习笔记之 Socket 编程相关推荐
- iOS学习笔记64-Apple Pay编程指南
本文由CocoaChina译者xiaoying.tr培子翻译自苹果官方文档:Apple Pay Programming Guide 目录 关于Apple Pay 配置支付环境 创建支付请求 授权支付 ...
- 黑马程序员_java自学学习笔记(八)----网络编程
黑马程序员_java自学学习笔记(八)----网络编程 android培训. java培训.期待与您交流! 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无 ...
- OpenCV for Ios 学习笔记(4)-标记检测1
本文原始地址:OpenCV for Ios 学习笔记(4)-标记检测1 简单的标记经常是以白色块和黑色块构成的规则图形.因为我们预先知道这些因素,所以我们可以很容易检测标记. 如图: 首先,我们需要找 ...
- IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法...
IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法 Author:hmjiangqq Email:jiangqqlmj@163.com ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- java学习笔记15--多线程编程基础2
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...
- iOS学习笔记-自己动手写RESideMenu
代码地址如下: http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars ...
- iOS学习笔记-地图MapKit入门
代码地址如下: http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错 ...
- iOS学习笔记-自定义过渡动画
代码地址如下: http://www.demodashi.com/demo/11678.html 这篇笔记翻译自raywenderlick网站的过渡动画的一篇文章,原文用的swift,由于考虑到swi ...
- IOS学习笔记07---C语言函数-scanf函数
2013/8/7 IOS学习笔记07---C语言函数-scanf函数 ------------------------------ qq交流群:创梦技术交流群:251572072 ...
最新文章
- Mac中将delete键定义为删除键
- 如何看待团队合作这件事?
- macOS新版本终于删掉自带Python2,这波操作连Python死忠粉都叫好
- leetcode算法题--K 次串联后最大子数组之和★
- 456. 132 Pattern | 456. 132 模式(单调栈)
- button的格式的问题
- 一题多解 —— 同时找到序列的最大值最小值
- 支持多浏览器高拍仪开发控件
- android json解析歌词,网易云歌词获取
- python读取excel数据为矩阵_用Python实现excel中“矩阵”式列表转“向量”式列表...
- 会员制营销与EMAIL营销
- 读书笔记-别做正常的傻瓜
- js逆向破解 —— 懂车帝视频链接
- srs 直播连麦环境搭建
- ViewPager PagerAdapter
- MATLAB计算杨氏模量,基于MATLAB处理动态图像的杨氏模量测量方法.doc
- 埃及通信和信息技术部使用 OpenText ECM 内容服务平台为电子政务转型奠定基础
- 电子商务案例分析php,2020知到《西安邮电大学网课电子商务案例分析》单元测试答案2020高校邦《ThinkPHP框架技术》答案免费...
- html5 打气球小游戏,在javascript+css3中如何实现打气球小游戏
- 计算机一级dbf,计算机一级MSOffice模拟试题(8)
热门文章
- Pivotal Cloud Foundry安全原理解析
- 信息安全系统设计基础第一次实验报告
- struts2 + spring + mybatis 框架整合
- 马虎将classname加到了id属性中,造成报错
- machine learning (7)---normal equation相对于gradient descent而言求解linear regression问题的另一种方式...
- Visual Sourcesafe Internet使用备忘
- 001.Spring | 依赖注入原理分析
- opencv python 鼠标响应操作
- Objective--C语言预处理命令之条件编译(#ifdef,#else,#endif,#if等)
- 切割日志(mysql,nginx,php tomcat)使用logrotate