ios - 连接socket服务器后会自动断开
本文介绍了ios - 连接socket服务器后会自动断开的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
业务要求连接socket服务器,然后向服务器发送一条指令,后接收服务器返回的数据。现在的问题是我连上服务器并向服务器发送指令后,socket连接会自己断开(执行了socketDidDisconnect这个回掉方法),收不到服务器返回的数据,请问这是什么问题?
比较奇怪的是,在socketDidDisconnect这个方法里打印socket,却是null,err也没有
- (void)connect
{
dispatch_queue_t mainQ = dispatch_get_main_queue();
GCDAsyncSocket *asyncSocket = [[GCDAsyncSocket alloc]initWithDelegate:self delegateQueue:mainQ];
NSString *host = @"xxx";
uint16_t port = xxx;
MYLog(@"connecting");
NSError *error = nil;
if (![asyncSocket connectToHost:host onPort:port error:&error]) {
MYLog(@"oops");
}
}
- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port{
MYLog(@"connected");
Byte byte[] = {0x10, 0x03, -1, 0x00, 0x10, 0x03};
NSData *data = [[NSData alloc]initWithBytes:byte length:sizeof(byte)];
MYLog(@"data:%@",data);
[sock writeData:data withTimeout:-1 tag:1];
}
- (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag{
MYLog(@"written tag:%ld",tag);
[sock readDataWithTimeout:-1 tag:1];
}
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{
MYLog(@"read data");
NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
}
- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err{
MYLog(@"disconnect err:%@ ",err.localizedDescription,);
}
解决方案
解决了,把asyncSocket设为属性就可以了....@property (strong, nonatomic) GCDAsyncSocket *asyncSocket;
这篇关于ios - 连接socket服务器后会自动断开的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文