ios socket(基础demo)

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

  

时间: 2024-10-13 00:57:41

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

IOS Socket 02-Socket基础知识

1. 简介 Socket就是为网络服务提供的一种机制 通信的两端都是Socket 网络通信其实就是Socket间的通信 数据在两个Socket间通过IO传输 2. Socket通信流程图 3. 模拟QQ聊天图 首先,张三的QQ先发出一句话'你吃饭了吗'到服务器Server.Server接收到之后,将这段话发送给李四. 然后,李四接收到这句话后,作出相应的答复'还没,一起吃不'给张三的QQ.这句话返回操作也是一样的流程,先送到服务器,最后送到张三QQ中.如下图: 看本篇文章之前,可以先了解一下网络

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

1. 网络参考模型 OSI参考模型                                          TCP/IP参考模型 2. 七层简述 1)物理层:主要定义物理设备标准,如网线的接口类型.各种传输介质的传输速率等.主要作用是传输比特流(就是由1.0转化为电流强弱来进行传输,到达目的地后再转化为1.0,也就是常说的数模与模数转换).这一层的数据叫做比特(bit),主要设备:集线器 2)数据链路层:主要将从物理层接收的数据进行MAC地址的封装与解封装.常把这一层的数据叫做帧,主要

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

写在准备动手的时候: Socket通讯在iOS中也是很常见,自己最近也一直在学习Telegram这个开源项目,Telegram就是在Socket的基础上做的即时通讯,这个相信了解这个开源项目的也都知道,希望自己能慢慢的了解一下它的这个MtProtoKit开源协议,即时通讯这一块的东西我以前写过一篇<iOS 即时通讯 + 仿微信聊天框架 + 源码>,从点击量看的出来真的这一块的东西我们的需求量还是很大,<iOS 即时通讯 + 仿微信聊天框架 + 源码>这篇文章由于自己去年也是能力有限

iOS开发基础知识--碎片32

 iOS开发基础知识--碎片32 1:动画属性UIViewAnimationOptions说明 a:常规动画属性设置(可以同时选择多个进行设置) UIViewAnimationOptionLayoutSubviews:动画过程中保证子视图跟随运动. UIViewAnimationOptionAllowUserInteraction:动画过程中允许用户交互. UIViewAnimationOptionBeginFromCurrentState:所有视图从当前状态开始运行. UIViewAnimat

[java]基于UDP的Socket通信Demo

java课编程作业:在老师给的demo的基础上实现客户端发送数据到服务器端,服务器端接受客户端后进行数据广播. 整体功能类似于聊天室,代码部分不是太难,但是在本机测试的时候出现这样的问题: 服务端通过将每一个Socket客户端的IP存入Set集合,每次接受到数据后都向当前所有的IP转发.但是本机演示的时候所有开的ChatClient客户端都是同一IP,怎么测试呢? 解决办法就是本机测试时候服务端向多个不同的端口转发就好了,这样跑起来的客户端是在不同端口上进行监听的(只是为了实现广播,实际应用下还

iOS开发基础知识--碎片21

iOS开发基础知识--碎片21  1:[UIScreen mainScreen].scale知识点 当屏幕分别为640x940时[[UIScreen mainScreen] scale]=2.0 当屏幕分别为320x480时[[UIScreen mainScreen] scale]=1.0 2:如何正确的绘制1像素的线 #define SINGLE_LINE_WIDTH (1 / [UIScreen mainScreen].scale) #define SINGLE_LINE_ADJUST_OF

iOS开发基础知识--碎片14

iOS开发基础知识--碎片14  1:ZIP文件压缩跟解压,使用ZipArchive 创建/添加一个zip包 ZipArchive* zipFile = [[ZipArchive alloc] init]; //次数得zipfilename需要一个完整得路径,例如***/Documents/demo.zip [zipFile CreateZipFile2:@"zipfilename"]; //有两种可选得方式进行创建压缩包,带密码和不带密码的 [[zipFile CreateZipFi

iOS Socket介绍及其简单应用

socket,究竟是什么东东,面试时,笔试有他,面试也有他,如果做智能硬件,肯定会用到socket,所以,今天带大家回顾一下socket: 一.介绍:Socket:是应?层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是 一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接?后面:例: 你要打电话给?个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了.等交流结束,挂断电话结束此次交谈. 建立连接步骤:先从服

Unix网络编程 之 socket基础

基本结构 (这部分的地址均为网络地址<网络字节序>) 1.struct sockaddr:通用套接字地址结构 此结构用于存储通用套接字地址. 数据结构定义: typedef unsigned short sa_family_t; struct sockaddr { sa_family_t sa_family; /* address family, AF_xxx */ char sa_data[14]; /* 14 bytes of protocol address */ };    sa_fa