• IOS学习笔记之 Socket 编程


    本文转载至 http://www.tuicool.com/articles/RNFRva

     

    时间 2014-12-07 12:48:00  博客园-原创精华区原文  http://www.cnblogs.com/chengzi/p/4149242.html

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

  • 相关阅读:
    roundabout插件使用(3d旋转轮播图)兼容IE8
    css实现定高的元素在不定高的容器中水平垂直居中(兼容IE8及以上)
    jq点击小图 弹出大图(更新版)
    pc端页面在移动端显示问题
    swiper横向轮播--3d
    swiper横向轮播(兼容IE8)
    windows 7安装apache
    从SDP中至少要看到那些东西?
    FS拓展设置
    Freeswitch 入门
  • 原文地址:https://www.cnblogs.com/Camier-myNiuer/p/4150193.html
Copyright © 2020-2023  润新知