zoukankan      html  css  js  c++  java
  • iOS开发socket通讯

    写写socket通讯那些事儿.     socket通讯公司用于给服务器发一些指令用于控制智能家居类的设备.socket无非就是发过来发过去,至于具体内容跟服务器协商就好.接下来先说说与socket通讯配合使用的socket Tool 的mac 工具.首先打开工具(工具连接以及socket用到的文件:SocketToolfor_mac_and_Third_for_xocde_socket.zip)选择Tcp Server 然后点击创建 端口号输入一个数字,60000 把. 注意可能完成之后这个数据会变,得到的电脑ip地址不对,没关系,自己到笔记本的设置中的网络中查看自己的电脑ip.用于oc代码编写,mac socket tool 工具打开之后,然后代码中创建连接,然后发信息,socketTool 工具需要点击Tcp Servier 然后在点击发送的那个ip就会收到数据.也可以给手机客户端回复/完毕,直接上代码

    #import "ControlDeviceViewController.h"

    #import "GNASocket.h"

    @interface ControlDeviceViewController ()

    {

        BOOL isON;

    }

    @property (nonatomic, strong) GCDAsyncSocket *socket;

    @property (strong, nonatomic) IBOutlet UIImageView *deviceStatus;

    @property (strong, nonatomic) IBOutlet UIButton *turnOnOrOff;

    @end

    @implementation ControlDeviceViewController

    - (void)viewDidLoad {

        [super viewDidLoad];

        isON = NO;

        [self connect];

        // Do any additional setup after loading the view from its nib.

    }

    // 和服务器进行链接

    - (void)connect

    {

        // 1. 创建socket

        self.socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];

        

        // 2. 与服务器的socket链接起来

        NSError *error = nil;

        BOOL result = [self.socket connectToHost:@"IP" onPort:端口(int) error:&error];

        

        // 3. 判断链接是否成功

        if (result) {

            NSLog(@"客户端链接服务器成功");

        } else {

            NSLog(@"客户端链接服务器失败");

        }

    }

    // 发送消息

    - (IBAction)sendMassage:(UIButton *)sender

    {

        

        if (isON) {//开着的状态

            self.deviceStatus.image = [UIImage imageNamed:@"cp"];

            [self.turnOnOrOff setImage:[UIImage imageNamed:@"Normal"] forState:UIControlStateNormal];

        }else{

            self.deviceStatus.image = [UIImage imageNamed:@"cp_kai"];

            [self.turnOnOrOff setImage:[UIImage imageNamed:@"Active"] forState:UIControlStateNormal];

        }

        

        [self.socket writeData:[@"发送的数据" dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:0];

        isON = !isON;

    }

    #pragma mark - GCDAsyncSocketDelegate

    // 客户端链接服务器端成功, 客户端获取地址和端口号

    - (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port

    {

        NSLog(@"%@",[NSString stringWithFormat:@"链接服务器%@", host]);

        GNASocket *socket = [GNASocket defaultScocket];

        socket.mySocket = self.socket;

        [self.socket readDataWithTimeout:-1 tag:0];

    }

    // 客户端已经获取到内容

    - (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag

    {

        NSString *content = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

        NSLog(@"%@",content);

        [self.socket readDataWithTimeout:-1 tag:0];

    }

  • 相关阅读:
    delete 用法总结
    js数组去重的常用方法总结
    学习中 常用到的string内置对象方法的总结
    Array 对象常用的方法总结
    javascript中运算符有哪些? 他们的优先级 呢?
    那些年前端经典面试题
    HHVM 3.0 发布,执行 PHP 的虚拟机
    【问底】徐汉彬:PHP7和HHVM的性能之争 (真是学到了很多)
    mysql 简单sql语句
    【问底】王帅:深入PHP内核(一)——弱类型变量原理探究
  • 原文地址:https://www.cnblogs.com/godlovexq/p/5667645.html
Copyright © 2011-2022 走看看