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];

    }

  • 相关阅读:
    java回调函数这样说,应该明确了吧!
    Aamazon Web Service EC2 Ubuntu 新建用户而且用ssh连接host
    Html animation by css(Sequence Js Tutorial)
    shell脚本一键安装mysql5.7.x
    HDU 4544 湫湫系列故事――消灭兔子
    简明python教程 --C++程序员的视角(八):标准库
    简明python教程 --C++程序员的视角(七):异常
    简明python教程 --C++程序员的视角(六):输入输出IO
    简明python教程 --C++程序员的视角(五):面向对象的编程
    简明python教程 --C++程序员的视角(四):容器类型(字符串、元组、列表、字典)和参考
  • 原文地址:https://www.cnblogs.com/godlovexq/p/5667645.html
Copyright © 2011-2022 走看看