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