Socket在iOS客户端上的简单实现 - 利用GCAsyncSocket框架

GCAsyncSocket 这是一个2003的开发出来的一个开源框架

首先把GCDAsyncSocket的.h和.m文件拖入到工程中

试图控制器遵守GCDAsyncSocketDelegate协议

实例:在页面上有一个简单的textView和textField 在textField中输入文字后,点击发送即可把文字发送到服务器

,服务器端返回的文字数据会显示到textView上

//  服务器主机ip地址
#define kHost @"172.16.3.101"
//  服务器主机通信端口
#define kPort 10024

@interface LYViewController ()<GCDAsyncSocketDelegate]]]]>

//  创建socket对象,进行通信
@property (nonatomic, strong) GCDAsyncSocket *socket;
@property (nonatomic, strong) GCDAsyncSocket *socketServer;
//  创建安装socket对象
- (void)_setupSocket;
- (void)_setupServerSocket;
//
- (void)_keyboardFrameChange:(NSNotification *)notification;

@end

@implementation LYViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
     self.textField.delegate = self;
    [self _setupSocket];
    [self _setupServerSocket];
}
- (BOOL)prefersStatusBarHidden
{
    return YES;
}
#pragma mark - 键盘弹起 改变输入框的位置
#pragma mark 注册通知 改变输入框的位置
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:YES];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_keyboardFrameChange:) name:UIKeyboardWillChangeFrameNotification object:nil];
}
#pragma mark 移除通知
- (void)viewWillDisappear:(BOOL)animated
{
    [super viewDidDisappear:YES];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillChangeFrameNotification object:nil];
}
#pragma mark 接收到键盘弹起通知相应的方法
- (void)_keyboardFrameChange:(NSNotification *)notification
{
    CGRect textFieldRect = self.textField.frame;
    
    NSDictionary *userInfo = notification.userInfo;
    CGRect beginRect = [userInfo[UIKeyboardFrameBeginUserInfoKey] CGRectValue];
    CGRect endRect = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
    CGFloat tempY = CGRectGetMinY(endRect) - CGRectGetMinY(beginRect);
    
    textFieldRect.origin.y += tempY;
    
    [UIView animateWithDuration:.25 animations:^{
        self.textField.frame = textFieldRect;
    }];
    
}
#pragma mark 点击return 键盘收回 发送消息(写入数据)
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{

NSString *dataString = [self.textField.text stringByAppendingString:@"\r\n"];
    NSData *data = [dataString dataUsingEncoding:NSUTF8StringEncoding];
    [self.socket writeData:data withTimeout:-1 tag:0];
    
    
    [textField resignFirstResponder];
    return YES;
    
}

#pragma amrk - private methods
//  创建安装socket对象
-(void)_setupSocket
{
    self.socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
    //  连接到服务器
    [self.socket connectToHost:kHost onPort:kPort error:nil];
}

//  创建服务器对象
- (void)_setupServerSocket
{
    self.socketServer = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
    
    [self.socket acceptOnPort:10024 error:nil];

}

#pragma mark - socket delegate
//  连接服务器成功
-(void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port
{
    NSLog(@"%s", __FUNCTION__);
    //  等待读取数据
    [self.socket readDataToData:[GCDAsyncSocket CRLFData] withTimeout:-1 maxLength:NSIntegerMax tag:0];
}

//  读到数据的回调方法
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
    NSString *content = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    self.textView.text = content;
}
- (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag
{
    [self.socket readDataToData:[GCDAsyncSocket CRLFData] withTimeout:-1 maxLength:NSIntegerMax tag:0];
    
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

Socket在iOS客户端上的简单实现 - 利用GCAsyncSocket框架,布布扣,bubuko.com

时间: 2024-10-27 10:33:36

Socket在iOS客户端上的简单实现 - 利用GCAsyncSocket框架的相关文章

[PHP]利用XAMPP搭建本地服务器, 然后利用iOS客户端上传数据到本地服务器中(三. PHP端代码实现)

一.安装XAMPP   http://www.cnblogs.com/lidongxu/p/5256330.html 二. 配置MySql http://www.cnblogs.com/lidongxu/p/5256515.html 然后呢, 今天我们就来接触下PHP开发语言 1. 首先呢, 需要在我们本机服务器文件夹资源下新建个.php文件,   废话嘛(你要写php啦!) 2. 在register.php 输入以下代码 <?php // 1. 获取客户端利用post方式网络请求的body里的

Qt学习 之 Socket通信(世界上最简单的例子了)

最近写大作业用到Qt的Socket部分,网上关于这部分的资料都太过复杂,现在总结一下一些简单的应用.有机会可以给大家讲讲用Socket传送文件的代码. 这里主要讲解如何实现TCP和UDP的简单通信. socket简介 在LINUX下进行网络编程,我们可以使用LINUX提供的统一的套接字接口.但是这种方法牵涉到太多的结构体,比如IP地址,端口转换等,不熟练的人往往容易犯这样那样的错误.QT中提供的SOCKET完全使用了类的封装机制,使用户不需要接触底层的各种结构体操作.而且它采用QT本身的sign

iOS史上最简单修改导航栏分隔线颜色方法!!!

override func viewDidLoad() { super.viewDidLoad() if let imageView = self.findNavLineView(view: navigationBar) { // 在分隔线上添加一个跟分隔线大小一模一样的View, 然后修改颜色即可 let navBarLineView = UIView() navBarLineView.frame = imageView.bounds navBarLineView.backgroundColo

开源中国iOS客户端学习

开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客    http://blog.csdn.net/column/details/xfzl-kykhd.html 开源中国iOS客户端学习——序 说到这款开源软件就得提到她的娘家了--开源中国社区: 开源中国社区简介:开源中国 www.oschina.net 成立于2008年8月,是目前中国最大的开源技术社区.传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现.使用.并交流开源技术的平台.目前开源中国社区已收

ios通知使用 书上案例 简单易懂

/* The notification name */const NSString *ResultOfAppendingTwoStringsNotification =@"ResultOfAppendingTwoStringsNotification"; /* Keys inside the dictionary that our notification sends */const NSString*ResultOfAppendingTwoStringsFirstStringInfo

史上最简单,一步集成侧滑(删除)菜单,高仿QQ、IOS。

重要的话 开头说,not for the RecyclerView or ListView, for the Any ViewGroup. 本控件不依赖任何父布局,不是针对 RecyclerView.ListView,而是任意的ViewGroup里的childView都可以使用侧滑(删除)菜单.支持任意ViewGroup.0耦合.史上最简单. 概述 本控件从撸出来在项目使用至今已经过去7个月,距离第一次将它push至github上,也已经2月+.(之前,我发表过一篇文章.传送门:http://b

Android滑动菜单特效实现,仿人人客户端侧滑效果,史上最简单的侧滑实现

本文首发于CSDN博客,转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8714621 人人客户端有一个特效还是挺吸引人的,在主界面手指向右滑动,就可以将菜单展示出来,而主界面会被隐藏大部分,但是仍有左侧的一小部分同菜单一起展示. 据说人人客户端的这个特效是从facebook客户端模仿来的,至于facebook是不是又从其它地方模仿来的就不得而知了.好,今天我们就一起来实现这个效果,总之我第一次看到这个特效是在人人客户端看到的,我

猿题库 iOS 客户端架构设计(原文地址:http://gracelancy.com/blog/2016/01/06/ape-ios-arch-design/)

猿题库 iOS 客户端架构设计 序 猿题库是一个拥有数千万用户的创业公司,从2013年题库项目起步到2015年,团队保持了极高的生产效率,使我们的产品完成了五个大版本和数十个小版本的高速迭代.在如此快速的开发过程中,如何保证代码的质量,降低后期维护的成本,以及为项目越来越快的版本迭代速度提供支持,成为了我们关注的重要问题.这篇文章将阐明我们在猿题库 iOS 客户端的架构设计. MVC MVC,Model-View-Controller,我们从这个古老而经典的设计模式入手.采用 MVC 这个架构的

Android中Socket大文件断点上传

什么是Socket? 所谓Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信连的句柄,应用程序通常通过“套接字”向网络发送请求或者应答网络请求,它就是网络通信过程中端点的抽象表示.它主要包括以下两个协议: TCP (Transmission Control Protocol 传输控制协议):传输控制协议,提供的是面向连接.可靠的字节流服务.当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据.TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功