CocoaAsyncSocket 用法:

客户端:
#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.//1、初始化
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/cocoaAsynSocketExample

转载于:https://www.cnblogs.com/saytome/p/7715152.html

iOS socket 通讯 客户端和服务端(CocoaAsyncSocket 的用法)相关推荐

  1. 基于Socket实现客户端与服务端通讯

    基于Socket实现客户端与服务端通讯 socket 概述 Socket,套接字就是两台主机之间逻辑连接的端点.TCP/IP协议是传输层协议,主要解决数据如何 在网络中传输,而HTTP是应用层协议,主 ...

  2. php winform通信,C# Winform 通过Socket实现客户端和服务端TCP通信

    操作界面如下: 1.声明Socket 第一个参数:寻址方式,第二个参数:传输数据的方式,第三个参数:通信协议 Socket socket = new Socket(AddressFamily.Inte ...

  3. php socket 握手,python Socket之客户端和服务端握手详细介绍

    这篇文章主要为大家详细介绍了python Socket之客户端和服务端握手,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 简单的学习下利用socket来建立客户端和服务端之间的连接并且发送数据 1 ...

  4. Java中Socket实现客户端和服务端通信(多线程实现全双工通信)

    效果图 目录结构 服务端Server package server;import thread.SocketReader; import thread.SocketWrite;import java. ...

  5. java网络编程Socket实现客户端向服务端发送信息

    (可按目录按需阅读,我一般会整理的比较细) 前置知识 java IO Socket 什么是socket?socket字面意思其实就是一个插口或者套接字,包含了源ip地址.源端口.目的ip地址和源端口. ...

  6. php cannot bind port to socket,PHP基于socket实现客户端和服务端通讯功能

    本文主要介绍了PHP基于socket实现的简单客户端和服务端通讯功能,可实现服务端接收客户端发送的字符串进行翻转操作后返回客户端的功能,需要的朋友可以参考下 服务端: set_time_limit(0 ...

  7. Java中Socket通信-客户端与服务端相互传输对象数据

    场景 Java中Socket通信-服务端和客户端双向传输字符串实现: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1084885 ...

  8. 在Java中使用Socket模拟客户端和服务端(多线程)

    1:Socket与ServerSocket的交互 2.Socket和ServerSocket介绍 Socket 构造函数 Socket() Socket(InetAddress address, in ...

  9. socket模拟客户端和服务端

    思路:客户端先接收键盘的数据,变为输出流再转化为打印流,安行发送,接收来自服务端的数据,按行读取,最后关闭输入输出,释放资源 服务端按行接收数据,进行处理,变为输出流再转化为打印流,安行发送,最后关闭 ...

  10. Java中Socket通信-客户端向服务端发送照片

    场景 Java中Socket通信-服务端和客户端双向传输字符串实现: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1084885 ...

最新文章

  1. 实验四 主存空间的分配和回收
  2. 敏捷方法适合什么样的团队?
  3. 2014.12.22 几个有用的oracle正则表达式
  4. 【12c新特性】12c中如何自动启动PDB Pluggable Database
  5. 剪切板与正则表达式测试
  6. PHP5各个版本的新功能和新特性总结
  7. python和sas哪个有用考研_金融学研究生用好计量软件的好处呢? stata sas s-plus python R哪个更有重要呢?...
  8. 如何判断软件架构的好与坏
  9. python基础教程运行程序_Python入门基础教程:WSGI
  10. 2018湘南学院计算机分数线,湘南学院录取分数线2021是多少分(附历年录取分数线)...
  11. jQuery京东分类导航菜单
  12. Python实现连点器
  13. linux最高权限密码,Linux运维知识之15、login.defs(默认)登录和Linux默认权限设置(密码复杂度,相关安全设置)...
  14. 《 Python程序设计项目案例》—学生成绩(信息)管理系统普通版设计要求及部分参考代码(期末大作业、结课项目)
  15. matlab+butter+多维,matlab butter c实现
  16. android studio开发微信界面
  17. switch堡垒之夜服务器不响应,《堡垒之夜》因Switch因性能问题 单排无法跨平台联机...
  18. 【Git从入门到精通】02-深入Git
  19. 面试突击:什么是粘包和半包?怎么解决?
  20. VC驿站《VC++实战HTTP之POST》教程

热门文章

  1. 以下内容为Stackoverflow上整理以作纪录
  2. NLPCC 2022 投稿开始啦~
  3. 【综述】Google团队发布,一文概览Transformer模型的17大高效变种
  4. 【EMNLP2020】“自言自语”来实现无监督常识问答
  5. 【前沿】28篇标志性论文见证「自然语言处理NLP」2019-2020年度亮点进展
  6. 个别省通知!研究生推迟开学不停学!毕业答辩可采用远程视频方式
  7. 机器学习十大经典算法-KMeans
  8. pytorch_CNN实现文本情感分类
  9. 20191202_Apriori算法和FP-Growth算法python实现
  10. 每日算法系列【LeetCode 289】生命游戏