http://blog.sina.com.cn/s/blog_7a2f0a830101ecv4.html

clinetSocket 

1、viewcontroller.h
@interface ViewController : UIViewController<</span>GCDAsyncSocketDelegate,UITextFieldDelegate> { GCDAsyncSocket *socket; } @property(strong) GCDAsyncSocket *socket @property (strong, nonatomic) IBOutlet UITextField *host; @property (strong, nonatomic) IBOutlet UITextField *message; @property (strong, nonatomic) IBOutlet UITextField *port; @property (strong, nonatomic) IBOutlet UITextView *status; - (IBAction)connect:(id)sender; - (IBAction)send:(id)sender; @end viewcontroller.m //连接服务器 - (IBAction)connect:(id)sender { socket = [[GCDAsyncSocket alloc]initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; socket.delegate = self; NSError *err = nil; BOOL connState=[socket connectToHost:host.text onPort:[port.text intValue] error:&err]; if(!connState) { [self addText:err.description]; }else { NSLog(@"连接服务器:%@ 成功",host.text); [self addText:@"打开端口"]; } } -(void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port { [self addText:[NSString stringWithFormat:@"连接到:%@",host]]; [socket readDataWithTimeout:-1 tag:0]; } - (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err { NSLog(@"socket did is connect:%@",err); } //发送数据 - (IBAction)send:(id)sender { [socket writeData:[message.text dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:0]; [self addText:[NSString stringWithFormat:@"发送的数据:%@",message.text]]; [message resignFirstResponder]; [socket readDataWithTimeout:-1 tag:0]; } //读取服务器获取的数据 -(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag { NSString *newMessage = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; [self addText:[NSString stringWithFormat:@"服务器:%@:%@",sock.connectedHost,newMessage]]; [socket readDataWithTimeout:-1 tag:0]; } #pragma mark - View lifecycle -(void)addText:(NSString *)str { status.text = [status.text stringByAppendingFormat:@"%@\n",str]; } - (void)viewDidLoad { [super viewDidLoad]; //设置默认的服务器地址和端口 host.text = @"192.168.2.107"; port.text = @"54321"; // Do any additional setup after loading the view, typically from a nib. } 2、serviceSocket 1、appdelegate.h #import "GCDAsyncSocket.h" #import "GCDAsyncUdpSocket.h" @interface AppDelegate : NSObject <</span>NSApplicationDelegate,GCDAsyncSocketDelegate,GCDAsyncUdpSocketDelegate> { GCDAsyncSocket *socket; GCDAsyncSocket *s; } @property(strong) GCDAsyncSocket *socket; - (IBAction)listen:(id)sender; @property (unsafe_unretained) IBOutlet NSTextView *status; @property (unsafe_unretained) IBOutlet NSTextField *port; @property (unsafe_unretained) IBOutlet NSTextField *host; @property (assign) IBOutlet NSWindow *window; 2、appdelegate.m @implementation AppDelegate @synthesize status; @synthesize port; @synthesize host; @synthesize window = _window; @synthesize socket; - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { //服务器的端口号 port.stringValue = @"54321"; } -(void)addText:(NSString *)str { status.string = [status.string stringByAppendingFormat:@"%@\n",str]; } //开始监听 - (IBAction)listen:(id)sender { NSLog(@" begin listen"); socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; NSError *err = nil; if(![socket acceptOnPort:[port integerValue] error:&err]) { [self addText:err.description]; }else { [self addText:[NSString stringWithFormat:@"开始监听%d端口.",port.integerValue]]; } } - (void)socket:(GCDAsyncSocket *)sender didAcceptNewSocket:(GCDAsyncSocket *)newSocket { // The "sender" parameter is the listenSocket we created. // The "newSocket" is a new instance of GCDAsyncSocket. // It represents the accepted incoming client connection. // Do server stuff with newSocket... [self addText:[NSString stringWithFormat:@"建立与%@的连接",newSocket.connectedHost]]; s = newSocket; s.delegate = self; [s readDataWithTimeout:-1 tag:0]; } //向客户端写数据 -(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag { NSString *receive = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; [self addText:[NSString stringWithFormat:@"%@:%@",sock.connectedHost,receive]]; NSString *reply = [NSString stringWithFormat:@"服务器收到:%@",receive]; [s writeData:[reply dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:0]; [s readDataWithTimeout:-1 tag:0]; } @end

  

ios socket(基础demo)的更多相关文章

  1. IOS Socket 02-Socket基础知识

    1. 简介 Socket就是为网络服务提供的一种机制 通信的两端都是Socket 网络通信其实就是Socket间的通信 数据在两个Socket间通过IO传输 2. Socket通信流程图 3. 模拟Q ...

  2. IOS Socket 01-网络协议基础知识

    1. 网络参考模型 OSI参考模型                                          TCP/IP参考模型 2. 七层简述 1)物理层:主要定义物理设备标准,如网线的接 ...

  3. iOS Socket 整理以及CocoaAsyncSocket、SRWebSocket源码解析(一)

    写在准备动手的时候: Socket通讯在iOS中也是很常见,自己最近也一直在学习Telegram这个开源项目,Telegram就是在Socket的基础上做的即时通讯,这个相信了解这个开源项目的也都知道 ...

  4. IOS开发基础知识碎片-导航

    1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...

  5. IOS Socket 03-建立连接与登录

    1. 搭建python服务器 这里我们用到python服务器Socket Server.如何运行Server?下面介绍 1)通过百度云下载文件 http://pan.baidu.com/s/1i5yb ...

  6. iOS系列 基础篇 03 探究应用生命周期

    iOS系列 基础篇 03 探究应用生命周期 目录: 1. 非运行状态 - 应用启动场景 2. 点击Home键 - 应用退出场景 3. 挂起重新运行场景 4. 内存清除 - 应用终止场景 5. 结尾 本 ...

  7. iOS系列 基础篇 04 探究视图生命周期

    iOS系列 基础篇 04 探究视图生命周期 视图是应用的一个重要的组成部份,功能的实现与其息息相关,而视图控制器控制着视图,其重要性在整个应用中不言而喻. 以视图的四种状态为基础,我们来系统了解一下视 ...

  8. iOS系列 基础篇 05 视图鼻祖 - UIView

    iOS系列 基础篇 05 视图鼻祖 - UIView 目录: UIView“家族” 应用界面的构建层次 视图分类 最后 在Cocoa和Cocoa Touch框架中,“根”类时NSObject类.同样, ...

  9. iOS系列 基础篇 06 标签和按钮 (Label & Button)

    iOS系列 基础篇 06 标签和按钮 (Label & Button) 目录: 标签控件 按钮控件 小结 标签和按钮是两个常用的控件,下面咱们逐一学习. 1. 标签控件 使用Single Vi ...

随机推荐

  1. 【niubi-job——一个分布式的任务调度框架】----框架设计原理以及实现

    引言 niubi-job的框架设计是非常简单实用的一套设计,去掉了很多其它调度框架中,锦上添花但并非必须的组件,例如MQ消息通讯组件(kafka等).它的框架设计核心思想是,让每一个jar包可以相对之 ...

  2. js中的DOM操作(1)

    一.操作子节点 childNodes 通过该方式可以获取父节点下的所有子节点,但是由于浏览器的差异,这写节点中可能包含文本节点. <!DOCTYPE html> <html> ...

  3. jQuery基础之(三)jQuery功能函数前缀及与window.onload冲突

    1.jQuery功能函数前缀 在javascript中,开发者通常会编写一些小函数来处理各种操作细节,例如在用户提交表单时,要将文本框最前端和最末端的空格内容清理掉.而javascript中没有类似t ...

  4. MySQL配置

    一.登录MySQL 要登录到MySQL只需要使用如下命令. mysql -h localhost -u root -p localhost:IP地址: root:用户名: database:数据库名( ...

  5. Rdesktop

    linux远程windows rdesktop是一个开放源码的Window   NT中断服务器的客户端,它实现了远程桌面协议(RDP) rdesktop-1.7.0.tar 下载地址:http://d ...

  6. Oracle自定义函数实例

    1. 传入一个值, 如果该值为0,则返回空. CREATE OR REPLACE FUNCTION Fun_Test(p IN NUMBER) RETURN VARCHAR2 IS v_Result ...

  7. Myeclipse快捷键的使用

    存盘 Ctrl+s(肯定知道) 注释代码 Ctrl+/ 取消注释 Ctrl+\(Eclipse3已经都合并到Ctrl+/了) 代码辅助 Alt+/ 快速修复 Ctrl+1 代码格式化 Ctrl+Shi ...

  8. 001-编译hadoop-2.5.2总结

    前两天废了很大的劲来对hadoop-2.5.2进行64位系统的手动编译,由于对linux系统环境以及hadoop本身的不熟悉,编译过程中也出现了很多的问题,在此记录一下,对自己以后再次编译和看到此文章 ...

  9. 【bzoj1211】 HNOI2004—树的计数

    http://www.lydsy.com/JudgeOnline/problem.php?id=1211 (题目链接) 题意 一个有n个结点的树,设它的结点分别为v1, v2, …, vn,已知第i个 ...

  10. P1391 走廊泼水节

    时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景  话说,中中带领的OIER们打算举行一次冬季泼水节,当然这是要秘密进行的,绝对不可以让中中知道.不过中中可是老 ...