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

    }

  • 相关阅读:
    一个强迫症用户的锤子手机使用体验
    起点——2015年终总结
    用“MEAN”技术栈开发web应用(三)用mongodb搭建数据库
    用“MEAN”技术栈开发web应用(二)express搭建服务端框架
    SpringBoot/Spring使用@Value进行属性绑定(尚硅谷)
    springboot/spring使用ConfigurationProperties注解读取自定义属性(尚硅谷)
    Spring Boot项目中@SpringBootTest测试的时候卡住,一直Resolving Maven dependencies...
    ASP.NET项目:请使用语言版本6或者更高版本
    安装CUDA坑:CUDA driver version is insufficient for CUDA runtime version
    Failed to load the native TensorFlow runtime. ImportError: libcuda.so.1: cannot open shared object file: No such file or directory
  • 原文地址:https://www.cnblogs.com/godlovexq/p/5667645.html
Copyright © 2020-2023  润新知