CocoaAsyncSocket 用法:git
客戶端: #import "ViewController.h" #import "GCDAsyncSocket.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UITextField *ipField; @property (weak, nonatomic) IBOutlet UITextField *portField; @property (weak, nonatomic) IBOutlet UITextField *sendMsgField; @property (weak, nonatomic) IBOutlet UITextView *reciveMsgTextView; //客戶端socket @property (nonatomic) GCDAsyncSocket *clientSocket; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //一、初始化 self.ipField.text = @"172.16.1.6"; self.clientSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)linkButtonAction:(id)sender { //鏈接服務器 [self.clientSocket connectToHost:self.ipField.text onPort:self.portField.text.integerValue withTimeout:-1 error:nil]; } - (IBAction)sendMsgButtonAction:(id)sender { NSData *data = [self.sendMsgField.text dataUsingEncoding:NSUTF8StringEncoding]; //withTimeout -1 :無窮大 //tag: 消息標記 [self.clientSocket writeData:data withTimeout:-1 tag:0]; } - (void)showMessageWithText:(NSString *)text { self.reciveMsgTextView.text = [self.reciveMsgTextView.text stringByAppendingFormat:@"%@\n", text]; } #pragma mark - GCDAsynSocket Delegate - (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port{ [self showMessageWithText:@"連接成功"]; [self showMessageWithText:[NSString stringWithFormat:@"服務器IP : %@", host]]; [self.clientSocket readDataWithTimeout:-1 tag:0]; } //收到消息 - (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{ NSString *text = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; [self showMessageWithText:text]; [self.clientSocket readDataWithTimeout:-1 tag:0]; } - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ [self.view endEditing:YES]; } @end
服務端: #import "ViewController.h" #import "GCDAsyncSocket.h" @interface ViewController ()<GCDAsyncSocketDelegate> /** 端口號 **/ @property (weak, nonatomic) IBOutlet UITextField *portField; /** 發送消息 **/ @property (weak, nonatomic) IBOutlet UITextField *sendMsgField; /** 鏈接端口號按鈕 **/ @property (weak, nonatomic) IBOutlet UIButton *linkPortButton; /** 發送消息按鈕 **/ @property (weak, nonatomic) IBOutlet UIButton *sendMsgButton; /** 接受消息 **/ @property (weak, nonatomic) IBOutlet UITextView *reciveMsgTextView; //服務器socket(開放端口,監聽客戶端socket的連接) @property (nonatomic) GCDAsyncSocket *serverSocket; //保護客戶端socket @property (nonatomic) GCDAsyncSocket *clientSocket; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //初始化服務器socket self.serverSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } /** 鏈接端口 **/ - (IBAction)linkPortButtonAction:(id)sender { NSError *error = nil; BOOL result = [self.serverSocket acceptOnPort:self.portField.text.integerValue error:&error]; if (result && error == nil) { //開放成功 [self showMessageWithText:@"鏈接成功"]; } } /** 發消息 **/ - (IBAction)sendMsgButtonAction:(id)sender { NSData *data = [self.sendMsgField.text dataUsingEncoding:NSUTF8StringEncoding]; //withTimeout -1: 一直等 //tag:消息標記 [self.clientSocket writeData:data withTimeout:-1 tag:0]; } - (void)showMessageWithText:(NSString *)text { self.reciveMsgTextView.text = [self.reciveMsgTextView.text stringByAppendingFormat:@"%@\n",text]; } #pragma mark - 服務器socket Delegate - (void)socket:(GCDAsyncSocket *)sock didAcceptNewSocket:(GCDAsyncSocket *)newSocket{ //保存客戶端的socket self.clientSocket = newSocket; [self showMessageWithText:@"連接成功"]; [self showMessageWithText:[NSString stringWithFormat:@"服務器地址:%@ -端口: %d", newSocket.connectedHost, newSocket.connectedPort]]; [self.clientSocket readDataWithTimeout:-1 tag:0]; } //收到消息 - (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{ NSString *text = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; [self showMessageWithText:text]; [self.clientSocket readDataWithTimeout:-1 tag:0]; } @end
gitHub 地址:https://github.com/lc081200/cocoaAsynSocketExamplegithub