最近开始静心学习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. 用Word收集网页中的内容,用文档结构图整理

    如何用Word保存网页中的内容 网页中的内容,用什么保存好? 用笔记类软件是个不错的选择,还可以用 Word 保存,这样方便用“文档结构图”来整理网页. 如图:网页收集后用文档结构图进行整理. (图一 ...

  2. 关于NMF(Non-negative Matrix Factorization )

    著名的科学杂志<Nature>于1999年刊登了两位科学家D.D.Lee和H.S.Seung对数学中非负矩阵研究的突出成果.该文提出了一种新的矩阵分解思想――非负矩阵分解(Non-nega ...

  3. 手机前端页面js

    (function () { var phoneWidth = parseInt(window.screen.width); var phoneScale = phoneWidth / 640; va ...

  4. android 左右翻页

    布局: <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android ...

  5. 如何闪开安装VS2013必须要有安装IE10的限制

    把下面这一段文字,储存成.bat档案,然后右击以管理员角色去执行它.@ECHO OFF :IE10HACK REG ADD "HKLM\SOFTWARE\Wow6432Node\Micros ...

  6. Intent用法简介

    Intent作为联系各Activity之间的纽带,其作用并不仅仅只限于简单的数据传递.通过其自带的属性,其实可以方便的完成很多较为复杂的操作.例如直接调用拨号功能.直接自动调用合适的程序打开不同类型的 ...

  7. Xcode 6 UITextField 键盘不弹出

    iOS Simulator -> Hardware -> Keyboard Uncheck "Connect Hardware Keyboard"

  8. swift 闭包

    闭包可以捕获和存储其所在上下文中任意常量和变量的引用. 这就是所谓的闭合并包裹着 这些常量和变量,俗称闭包. Swift标准库中提供了sort排序函数,sort函数的第二个参数是个闭包.和OC中的bl ...

  9. WIN8 下Cisco VPN连接 出现vpn 422 failed to enable virtual adapter错误

    今天在家用VPN软件连接,出现了“vpn 422 failed to enable virtual adapter”的错误,系统安装的是Win8专业版32位,百度了半天又很多方法解决不了,后来发现了一 ...

  10. ubuntu下解决wireshark权限问题

    wireshark要监控eth0,但是必须要root权限才行.但是,直接用root运行程序是相当危险,也是非常不方便的. 解决方法如下: 1.添加wireshark用户组 sudo groupadd ...