你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> IOS學習筆記之 Socket 編程

IOS學習筆記之 Socket 編程

編輯:關於IOS

最近開始靜心學習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]; }  這裡還調用了   1 readDataWithTimeout 方法來讀取服務器返回的信息<br><br> 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小項目了。 
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved