美文网首页
iOS 客户端Socket

iOS 客户端Socket

作者: 观星 | 来源:发表于2016-06-04 11:51 被阅读18次

    头文件

    #import <UIKit/UIKit.h>
    
    @interface ViewController : UIViewController <NSStreamDelegate> {
        NSInputStream  *_inputStream;
        NSOutputStream *_outputStream;
    }
    
    @property (strong, nonatomic) NSMutableArray *messages;
    
    @end
    

    实现文件

    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        [self connectToServer];
    }
    
    #pragma mark - event response
    
    - (void)connectToServer {
        
        NSString *host = @"towel.blinkenlights.nl";
        
        int port = 23;
        
        CFReadStreamRef  readStream;
        CFWriteStreamRef writeStream;
        
        CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)host, port,&readStream, &writeStream);
        
        _inputStream  = (__bridge NSInputStream *)(readStream);
        _outputStream = (__bridge NSOutputStream *)(writeStream);
        
        _inputStream.delegate  = self;
        _outputStream.delegate = self;
        
        [_inputStream  scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
        [_outputStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
        
        [_inputStream open];
        [_outputStream open];
    }
    
    
    #pragma mark - NSStreamDelegate
    
    - (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode {
        
        NSLog(@"%@",[NSThread currentThread]);
        
        switch (eventCode) {
            case NSStreamEventNone: {
                
                break;
            }
            case NSStreamEventOpenCompleted: {
                NSLog(@"输入输入流打开完成");
                break;
            }
            case NSStreamEventHasBytesAvailable: {
                NSLog(@"有字节可读");
                
                [self readStream];
                
                break;
            }
            case NSStreamEventHasSpaceAvailable: {
                NSLog(@"可以发送字节");
                break;
            }
            case NSStreamEventErrorOccurred: {
                NSLog(@" 连接出现错误");
                break;
            }
            case NSStreamEventEndEncountered: {
                NSLog(@"连接结束");
                
                [_inputStream close];
                [_outputStream close];
            
                [_inputStream removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
                [_outputStream removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
                
                break;
            }
        }
    }
    
    #pragma private method
    
    - (void)readStream {
        
        uint8_t buff[1024];
        
        NSUInteger len = [_inputStream read:buff maxLength:sizeof(buff)];
        
        NSData *data = [NSData dataWithBytes:buff length:len];
        
        NSString *recieve = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        
        NSLog(@"%@",recieve);
    }
    
    #pragma mark - setter & getter
    
    - (NSMutableArray *)messages {
        if (_messages == nil) {
         
            _messages = [NSMutableArray array];
        }
        return _messages;
    }
    
    @end
    

    关键函数其实就是

    CFStreamCreatePairWithSocketToHost
    

    满足这个函数的参数需求就可以了。

    相关文章

      网友评论

          本文标题:iOS 客户端Socket

          本文链接:https://www.haomeiwen.com/subject/umuldttx.html