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

}

原文地址:https://www.cnblogs.com/godlovexq/p/5667645.html