最近开始静心学习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小项目了。

IOS学习笔记之 Socket 编程的更多相关文章

  1. 网络编程学习笔记:Socket编程

    文的主要内容如下: 1.网络中进程之间如何通信? 2.Socket是什么? 3.socket的基本操作 3.1.socket()函数 3.2.bind()函数 3.3.listen().connect ...

  2. Python Web学习笔记之socket编程

    Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络 ...

  3. 学习笔记(10) : Socket 编程典型代码积累

    网络编程实现的机制:   服务器端: 申请一个socket 绑定到一个IP地址和端口上 开启侦听,等待接受连接   客户端: 申请一个socket 连接服务器(指明IP.端口)   服务器端: 接收到 ...

  4. 孙鑫VC学习笔记:多线程编程

    孙鑫VC学习笔记:多线程编程 SkySeraph Dec 11st 2010  HQU Email:zgzhaobo@gmail.com    QQ:452728574 Latest Modified ...

  5. IOS学习笔记25—HTTP操作之ASIHTTPRequest

    IOS学习笔记25—HTTP操作之ASIHTTPRequest 分类: iOS2012-08-12 10:04 7734人阅读 评论(3) 收藏 举报 iosios5网络wrapper框架新浪微博 A ...

  6. iOS学习笔记-精华整理

    iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...

  7. iOS学习笔记总结整理

    来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...

  8. IOS学习笔记02---语言发展概述,计算机语言简介.

    IOS学习笔记02---语言发展概述,计算机语言简介. ------------------------------------------------------------------------ ...

  9. Hadoop源码学习笔记(4) ——Socket到RPC调用

    Hadoop源码学习笔记(4) ——Socket到RPC调用 Hadoop是一个分布式程序,分布在多台机器上运行,事必会涉及到网络编程.那这里如何让网络编程变得简单.透明的呢? 网络编程中,首先我们要 ...

随机推荐

  1. Dalvik VM (DVM) 与Java VM (JVM)之间有哪些区别?

    Dalvik虚拟机存在于Android系统,JVM是java虚拟机,两者都是虚拟机,本文就对两者进行比较,讲述它们的不同. Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的 ...

  2. 转载:Cellebrite发布新版手机取证软件,增强调查能力

    2012-5-24 7:57:51  文章来源:文传商讯  作者:文传商讯 UFED 1.1.9.7版本为移动取证数据提取.编码和分析提供了先进的技术突破 新闻事实: Cellebrite发布其旗舰产 ...

  3. Redis__WindowsServer主从服务部署及调用实例

    本文转自:http://www.cnblogs.com/gossip/p/4898653.html 一.先谈谈单个Redis服务的安装         使用的redis是2.8.17版本,从官网下载解 ...

  4. Raw-OS源代码分析之消息系统-Queue_Size

    分析的内核版本号截止到2014-04-15.基于1.05正式版.blogs会及时跟进最新版本号的内核开发进度,若源代码凝视出现"???"字样,则是未深究理解部分. Raw-OS官方 ...

  5. tldr 的安卓客户端

    上次在 Cheat (tldr, bropages) - Unix命令用法备忘单 这篇博文中提到过 tldr ,它跟 cheatsheet 的功能一样:用来查询一些常用命令的惯用法,呈现形式是简明扼要 ...

  6. Asp.net中的ajax回调模式(ICallbackEventHandler)

    客户端回调本质上就是指通过前端的客户端脚本向服务器端传递相应的数据参数,服务器端再以接受到的参数进行查询和处理,最后将结果回传到客户端进行显示.asp.net 2.0提供了实现无刷新回调的接口ICal ...

  7. LINQ TO ENTITY 根据Birthday获取Age

    from emp in EmployeeInfo let years = EntityFunctions.DiffYears(emp.Birthday.Value,DateTime.Now) let ...

  8. chm格式文件能打开,但看不到内容问题

    是chm格式的能打开文件,也能看到左边的目录信息,但是无法显示右面的具体内容.报错:无法显示网页.错误页面的url是:res://C:WINDOWSsystem32shdoclc.dll/dnserr ...

  9. 聊聊 Linux 中的五种 IO 模型

    本文转载自: http://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666538919&idx=1&sn=6013c451 ...

  10. 代码生成的地址:mygeneration

    一个代码生成的地址: https://gitshell.com/shiningrise/mygeneration/