socket 通过NSStrem 详解
时间: 2023-12-15 09:07:16 浏览: 26
Socket是一种通信机制,它允许两个不同的进程在网络上进行通信。在iOS开发中,我们可以使用CocoaAsyncSocket库来实现Socket通信。
在Socket通信中,我们通常使用NSStream类来进行数据的读写。NSStream是一个抽象类,它定义了抽象接口,可以通过其子类NSInputStream和NSOutputStream来实现具体的输入和输出流。
NSInputStream和NSOutputStream都是从NSStream类继承而来的,它们分别用于从Socket中读取数据和向Socket中写入数据。它们提供了一系列的方法来读写数据,比如read:maxLength:和write:maxLength:等。
在进行Socket通信时,我们需要先建立Socket连接,然后创建一个NSInputStream和一个NSOutputStream对象,将它们分别与Socket进行关联。这样,我们就可以通过这两个对象来进行数据的读写操作了。
具体实现可以参考以下代码示例:
```
// 建立Socket连接
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"127.0.0.1", 80, &readStream, &writeStream);
// 将NSInputStream和NSOutputStream对象与Socket关联
NSInputStream *inputStream = (__bridge NSInputStream *)readStream;
NSOutputStream *outputStream = (__bridge NSOutputStream *)writeStream;
// 打开输入和输出流
[inputStream open];
[outputStream open];
// 读取数据
uint8_t buffer[1024];
NSInteger len = [inputStream read:buffer maxLength:sizeof(buffer)];
NSData *data = [NSData dataWithBytes:buffer length:len];
// 写入数据
NSString *message = @"Hello, Socket!";
NSData *data = [message dataUsingEncoding:NSUTF8StringEncoding];
[outputStream write:[data bytes] maxLength:[data length]];
```
以上代码示例展示了如何使用NSStream类进行Socket通信。我们首先建立Socket连接,并将NSInputStream和NSOutputStream对象与Socket关联。然后,我们打开输入和输出流,并通过read:maxLength:和write:maxLength:方法进行数据的读写操作。