首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS Socket 連接 WiFi 打印機發送打印數據:AsyncSocket 異步通信完整實現

     編輯:程式設計綜合問答

iPad 與局域網打印機 Socket 通信:集成 AsyncSocket 庫,連接打印機 IP/端口,發送 UTF-8 編碼文本數據。

核心代碼結構

// .h
#import 
#import "AsyncSocket.h"
@interface ViewController : UIViewController  {
    AsyncSocket *asyncSocket;
}
@end

// .m
- (void)viewDidLoad {
    [super viewDidLoad];
    asyncSocket = [[AsyncSocket alloc] initWithDelegate:self];
    [asyncSocket setRunLoopModes:@[NSRunLoopCommonModes]];
}

- (IBAction)printAction:(id)sender {
    NSError *err = nil;
    if (![asyncSocket connectToHost:@"192.168.1.105" onPort:18011 error:&err]) {
        NSLog(@"Connect failed: %@", err);
        return;
    }
    // 連接成功後 delegate 會回調 onSocket:didConnectToHost:port:
}

- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port {
    NSLog(@"Connected to %@:%hu", host, port);
    NSString *printText = @"Socket測試成功!!!!";
    NSData *data = [printText dataUsingEncoding:NSUTF8StringEncoding];
    [sock writeData:data withTimeout:-1 tag:0];
    [sock readDataWithTimeout:1 tag:0]; // 可選:讀取回應
}

- (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag {
    NSLog(@"Data sent");
}

- (void)onSocketDidDisconnect:(AsyncSocket *)sock {
    NSLog(@"Disconnected");
}

關鍵點

  • AsyncSocket 異步非阻塞,需實現 AsyncSocketDelegate 回調。
  • setRunLoopModes 確保在常見 RunLoop 模式下接收事件。
  • 打印機協議可能為原始文本、ESC/POS 指令集等,需查閱打印機文檔構造數據包。
  • 生產環境需處理重連、心跳、錯誤恢復等健壯性邏輯。

AsyncSocket 讓 iOS Socket 通信輕鬆可靠,打印機集成不再難。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved