iOS中TCP通信

10 篇文章 0 订阅

       本文并不是讲述如何用原始的socket进行通信,而是用第三方类库AsyncSocket。它对socket进行了封装,使得TCP通信简单了许多,方便我们开发,个人认为若要认真学习TCP/IP,最好别用第三方库。本文简述如何用这个第三方库来进行多人聊天

1.准备工作

进行网络开发,系统库是少不了的,导入CFNetWork.framework。

将AsyncSocket库添加到我们的项目里面


再添加头文件

#import "AsyncSocket.h"
添加代理协议 AsyncSocketDelegate
为了快速演示,我们不再用代码布局UI,所以创建ViewController时,勾上xib选项。上边是两个TextField,和两个Button,下边是TextView布局如下:


2.实现部分

在 ViewController.h 声明成员变量和事件

    IBOutlet UITextField* _ipFiled;//IP
    IBOutlet UITextField* _textFiled;//send message
    IBOutlet UITextView* _textView;//receive message
    //客户端
    AsyncSocket* _sendSocket;
    //服务端
    AsyncSocket* _recvSocket;
    NSMutableArray* _socketArray;

    //连接
    - (IBAction)conToHost:(id)sender;
    //发送
    - (IBAction)sendText:(id)sender;


这里别忘了要将控件和对象进行绑定。

其余代码如下:

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    _socketArray = [[NSMutableArray alloc] init];
    //服务端
    _recvSocket = [[AsyncSocket alloc] initWithDelegate:self];
    //监听客户端来连接
    [_recvSocket acceptOnPort:5678 error:nil];
    //客户端
    _sendSocket = [[AsyncSocket alloc] initWithDelegate:self];
}

//监听到客户端连接
- (void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket{
    [_socketArray addObject:newSocket];
    //等待客户端发送消息
    [newSocket readDataWithTimeout:-1 tag:0];
}

//监听到客户端发送消息
- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{
    //处理客户端发来的消息 data
    NSString* str = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
    /*
     ip:你吃饭了
     ip:121.2.3.90
     */
    _textView.text = [NSString stringWithFormat:@"%@%@:%@\n", _textView.text, sock.connectedHost, str];
    
    //继续监听客户端发送消息
    [sock readDataWithTimeout:-1 tag:0];
}

//客户端
//连接到服务端
- (void)conToHost:(id)sender
{
    //如果是连接状态,先断开连接
    if (_sendSocket.isConnected)
    {
        [_sendSocket disconnect];
    }
    //连接
    [_sendSocket connectToHost:_ipFiled.text onPort:5678 withTimeout:30 error:nil];
}

//连接成功
- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
{
    NSLog(@"连接成功");
}

  完整Demo在这里。如果没有积分请留邮箱。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值