无法使用GCDAsyncSocket从服务器读取数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法使用GCDAsyncSocket从服务器读取数据相关的知识,希望对你有一定的参考价值。

我试图连接到服务器并向服务器发送一些信息(如用户名,密码..),然后服务器发回给我ID(字符串类型)。问题是我无法获取ID。谁能帮助我?我是ios编码的初学者。谢谢。

这是代码:

  1. 单击按钮后,它将调用我自己的函数来获取serverIP,这是一个字符串,而端口是一个int。
  2. 然后该函数将调用此函数来连接服务器: (void)logInCheck { asyncSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; NSError *error = nil; uint16_t port = serverPort; if (![asyncSocket connectToHost:serverIP onPort:port error:&error]) { DDLogError(@"Unable to connect to due to invalid configuration: %@", error); } else { DDLogVerbose(@"Connecting..."); [self passDataToServer]; } } //DataPassToServer is a NSString that hold my data (void)passDataToServer { NSData *requestData = [DataPassToServer dataUsingEncoding:NSUTF8StringEncoding]; [asyncSocket writeData:requestData withTimeout:-1.0 tag:0]; [asyncSocket readDataWithTimeout:-1 tag:0]; } //this function call successfully -(void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port { DDLogVerbose(@"socket:didConnectToHost:%@ port:%hu", host, port); } //this function call successfully (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag { DDLogVerbose(@"socket:didWriteDataWithTag:"); } //This function does not run !!! Nothing print out. (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag { DDLogVerbose(@"socket:didReadData:withTag:"); NSString *response = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"ID = %@",response); [asyncSocket readDataWithTimeout:-1 tag:0]; }
答案

我不知道您的服务器实现,但是,大多数实现在处理请求之前会读取第一个换行符。

因此,请确保您的[DataPassToServer dataUsingEncoding:NSUTF8StringEncoding]最后包含换行符(" ")。

你的代码看起来很好,适合我。

以上是关于无法使用GCDAsyncSocket从服务器读取数据的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中通过 GCDAsyncsocket 读取 xml 文件

无法接收使用 GCDAsyncSocket 发送的 UDP 数据包的响应

GCDAsyncSocket 未接收到所有传输的数据,缺少最后一个“块”

GCDAsyncSocket - 不接收数据 - AsyncSocket 工作正常

iOS开发——GCDAsyncSocket

iOS之GCDAsyncSocket第三方库的使用