IOS學習筆記之 Socket 編程

來源:互聯網
上載者:User

標籤:des   blog   http   io   ar   os   使用   sp   java   

  最近開始靜心學習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 編程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.