//
// ViewController.m
// socketConnect2
//
// Created by dascomzz on 16/1/20.
// Copyright © 2016年 DS. All rights reserved.
//
#import "ViewController.h"
#import <AsyncSocket.h>
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextView *logTextView; //日志文本
@property (weak, nonatomic) IBOutlet UITextView *textView;
@property (nonatomic,strong) NSData * tmpData;
@property (nonatomic,strong) NSData * currentData;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
clientSocket = [[AsyncSocket alloc] initWithDelegate:self];
}
#pragma mark - 私有方法
//日志
- (void)writeToLog:(NSString *)str{
//NSString * tmp = self.logTextView.text;
self.logTextView.text = [NSString stringWithFormat:@"%@",str];
}
//发送字符
- (void)sentMsg:(NSString *)str{
NSData *msgData = [str dataUsingEncoding:NSUTF8StringEncoding];
[clientSocket writeData:msgData withTimeout:60 tag:100];
//把当前发送的数据保存起来
_tmpData = msgData;
}
#pragma mark - 按钮方法
//连接打印机
- (IBAction)connectBtn:(id)sender {
// 1. 连接打印机
// NSString *ip = @"192.168.0.1";
if (![clientSocket isConnected]) {
NSString *ip = @"192.168.0.1";
UInt16 port = 9100;
[clientSocket connectToHost:ip onPort:port withTimeout:30 error:nil];
// 启动一个等待读操作
[clientSocket readDataWithTimeout:-1 tag:600];
}else{
[self writeToLog:@"已经连接了打印机"];
}
}
//发送消息
- (IBAction)sentStr:(id)sender {
if ([clientSocket isConnected] == NO) {
NSLog(@" 没有连接不能发消息");
[self writeToLog:@" 没有连接不能发消息"];
return;
}
// 必须要连接上才可以发送
// 开始发送消息
if ([self.textView.text isEqualToString:@""]) {
[self writeToLog:@"文本为空 不能发送"];
return;
}
[self sentMsg:[NSString stringWithFormat:@"%@",self.textView.text]];
}
//与打印机断开连接
- (IBAction)socketDisconnect:(id)sender {
if([clientSocket isConnected]){
[clientSocket disconnect];
[self writeToLog:@"已与打印机断开连接"];
}
}
//开始打印
- (IBAction)print:(id)sender {
if ([clientSocket isConnected] == NO) {
NSLog(@" 没有连接不能发消息");
[self writeToLog:@"没有连接不能发消息"];
return;
}
// 必须要连接上才可以发送
// 开始发送消息
[self sentMsg:@"\n"];
}
//打开WIFI选择界面
- (IBAction)selectWIFI:(id)sender {
NSURL *url = [NSURL URLWithString:@"prefs:root=WIFI"];
if ([[UIApplication sharedApplication] canOpenURL:url])
{
[[UIApplication sharedApplication] openURL:url];
}
}
//设置粗体
- (IBAction)btnSetFont:(id)sender {
Byte byte1[2]={27,69};
Byte byte2[2]={27,70};
NSData *data1=[[NSData alloc]initWithBytes:byte1 length:2];
NSData *data2=[[NSData alloc]initWithBytes:byte2 length:2];
[clientSocket writeData:data1 withTimeout:2 tag:0];
}
//换页
- (IBAction)nextPage:(id)sender {
Byte byte1[1]={12};
NSData *data1=[[NSData alloc]initWithBytes:byte1 length:1];
[clientSocket writeData:data1 withTimeout:2 tag:0];
}
#pragma mark - sockt代理方法
//已经发送成功
- (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag {
if(tag == 100){
_currentData = _tmpData;
_tmpData = nil;
NSString *tmp = [[NSString alloc]initWithData:_currentData encoding:NSUTF8StringEncoding];
[self writeToLog:[NSString stringWithFormat:@"表示发送完成了 打印机接收到了 :%@",tmp]];
NSLog(@"客户端 表示发送完成了 肯定对方接收到了");
}
}
//已经读取成功
- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
NSString *s = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
if (tag == 600) {
[self writeToLog:[NSString stringWithFormat:@"读到了一个打印机的响应 %@", s]];
NSLog(@"读到了一个打印机的响应 %@", s);
}
// 循环的读数据
[clientSocket readDataWithTimeout:-1 tag:600];
}
// 这个函数表示已经上了 代理函数
- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port {
NSString * msg = [NSString stringWithFormat:@"客户端 连接上了 %@:%d",host, port];
[self writeToLog:msg];
NSLog(@"客户端 连接上了 %@:%d", host, port);
}
//连接失败
- (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err {
NSString * msg = [NSString stringWithFormat:@"连接出错 %@", err];
[self writeToLog:msg];
NSLog(@"连接出错 %@", err);
// 断线重新连接
// [clientSocket connectToHost:ip onPort:port withTimeout:30 error:nil];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
小demo