IOS學習筆記之 Socket 編程


  最近開始靜心學習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小項目了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM