1.定义:
Socket是网络服务提供的一种套接字,通信两端都是Socket,网络通信通过Socket进行IO直接的传输,是一种长连接,让应用程序可以进行异步模式,提高速率,需要数据的时候才进行数据接收。
2.既然要了解Socket,就要对传输协议有一定的了解,可以把socket理解为封装TCP/IP协议API,TCP协议属于可靠性传输协议,需要进行三次握手(客户端发送信息到服务器,服务器响应发送到客户端,客户端响应后发送到服务器) UDP协议属于不可靠协议,是因为他不需要进行响应,就像知道一个大概的位置,然后就传送过去,每次能传64K左右的东西,传输速度很快,但是有时会丢包的情况。 所以视频,或则QQ群聊会用到UDP协议,QQ在单人聊天的时候,应该是进行TCP协议,所以个人认为QQ采用的是混合模型。
3.网络通信的三大要素:IP地址,传输协议,端口号。
IP地址:设备的唯一标示符。
传输协议:TCP UDP等
端口号:1-1023都是系统自带,如果个人要用的话需要1024以后的。需要熟记几个端口号,80,25,21等这里就不一一叙述。
4.开始进行代码
iOS主要按照NSStream(流)来发送和接收数据,可以设置流的代理,对流的状态变化做出相应连接建立,设置网络连接,绑定到主机和端口号,设置输入输出代理,监听数据流的状态,将输入输出添加至运行循环,打开输入输出流。
发送消息给服务器,有可读取字节时,读取服务器返回的内容,到达流末尾时,关闭流,同时并从主运行循环中删除。
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode{
switch (eventCode) {
case NSStreamEventOpenCompleted:
NSLog(@"完成");
break;
case NSStreamEventHasBytesAvailable:
NSLog(@"字节可读");
[self readData];
break;
case NSStreamEventHasSpaceAvailable:
NSLog(@"可发送字节");
break;
case NSStreamEventErrorOccurred:
NSLog(@"连接错误");
break;
case NSStreamEventEndEncountered:
NSLog(@"断开连接");
[self closeConnect];
break;
default:
NSLog(@"异常错误");
break;
}
}
- (void)closeConnect{