本文转载至 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 编程相关推荐

  1. iOS学习笔记64-Apple Pay编程指南

    本文由CocoaChina译者xiaoying.tr培子翻译自苹果官方文档:Apple Pay Programming Guide 目录 关于Apple Pay 配置支付环境 创建支付请求 授权支付 ...

  2. 黑马程序员_java自学学习笔记(八)----网络编程

    黑马程序员_java自学学习笔记(八)----网络编程 android培训. java培训.期待与您交流! 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无 ...

  3. OpenCV for Ios 学习笔记(4)-标记检测1

    本文原始地址:OpenCV for Ios 学习笔记(4)-标记检测1 简单的标记经常是以白色块和黑色块构成的规则图形.因为我们预先知道这些因素,所以我们可以很容易检测标记. 如图: 首先,我们需要找 ...

  4. IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法...

    IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法 Author:hmjiangqq Email:jiangqqlmj@163.com ...

  5. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  6. java学习笔记15--多线程编程基础2

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...

  7. iOS学习笔记-自己动手写RESideMenu

    代码地址如下: http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars ...

  8. iOS学习笔记-地图MapKit入门

    代码地址如下: http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错 ...

  9. iOS学习笔记-自定义过渡动画

    代码地址如下: http://www.demodashi.com/demo/11678.html 这篇笔记翻译自raywenderlick网站的过渡动画的一篇文章,原文用的swift,由于考虑到swi ...

  10. IOS学习笔记07---C语言函数-scanf函数

    2013/8/7 IOS学习笔记07---C语言函数-scanf函数 ------------------------------ qq交流群:创梦技术交流群:251572072            ...

最新文章

  1. Mac中将delete键定义为删除键
  2. 如何看待团队合作这件事?
  3. macOS新版本终于删掉自带Python2,这波操作连Python死忠粉都叫好
  4. leetcode算法题--K 次串联后最大子数组之和★
  5. 456. 132 Pattern | 456. 132 模式(单调栈)
  6. button的格式的问题
  7. 一题多解 —— 同时找到序列的最大值最小值
  8. 支持多浏览器高拍仪开发控件
  9. android json解析歌词,网易云歌词获取
  10. python读取excel数据为矩阵_用Python实现excel中“矩阵”式列表转“向量”式列表...
  11. 会员制营销与EMAIL营销
  12. 读书笔记-别做正常的傻瓜
  13. js逆向破解 —— 懂车帝视频链接
  14. srs 直播连麦环境搭建
  15. ViewPager PagerAdapter
  16. MATLAB计算杨氏模量,基于MATLAB处理动态图像的杨氏模量测量方法.doc
  17. 埃及通信和信息技术部使用 OpenText ECM 内容服务平台为电子政务转型奠定基础
  18. 电子商务案例分析php,2020知到《西安邮电大学网课电子商务案例分析》单元测试答案2020高校邦《ThinkPHP框架技术》答案免费...
  19. html5 打气球小游戏,在javascript+css3中如何实现打气球小游戏
  20. 计算机一级dbf,计算机一级MSOffice模拟试题(8)

热门文章

  1. Pivotal Cloud Foundry安全原理解析
  2. 信息安全系统设计基础第一次实验报告
  3. struts2 + spring + mybatis 框架整合
  4. 马虎将classname加到了id属性中,造成报错
  5. machine learning (7)---normal equation相对于gradient descent而言求解linear regression问题的另一种方式...
  6. Visual Sourcesafe Internet使用备忘
  7. 001.Spring | 依赖注入原理分析
  8. opencv python 鼠标响应操作
  9. Objective--C语言预处理命令之条件编译(#ifdef,#else,#endif,#if等)
  10. 切割日志(mysql,nginx,php tomcat)使用logrotate