我正在使用CocoaAsyncSocket-master源的 GCD 代码。我使用“EchoServer”运行服务器版本应用程序和“SimpleHTTPClient”客户端应用程序在我的 iOS 设备上运行。使用他们提供的示例,我可以运行桌面服务器应用程序和 iOS 客户端应用程序并将其连接起来而不会出现任何问题。
我现在正在尝试将UIImage 数据发送到服务器应用程序,而不是它们在现有客户端项目中发送的 http 标头。所以,我在客户端按照下面的代码发送UIImage 数据。但是,问题是,它没有将这些图像数据正确地发送到服务器前端应用程序。
代码:https ://github.com/robbiehanson/CocoaAsyncSocket
我使用 CocoaAsyncSocket 提供的相同项目 'CocoaAsyncSocket-master/GCD/Xcode/SimpleHTTPClient' 并更改了以下代码以发送示例图像。
用于发送的 SimpleHTTPClient 客户端代码:
- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
{
DDLogVerbose(@"socket:didConnectToHost:%@ port:%hu", host, port);
//NSString *requestStrFrmt = @"HEAD / HTTP/1.0\r\nHost: %@\r\n\r\n";
//NSString *requestStr = [NSString stringWithFormat:requestStrFrmt, HOST];
//NSData *requestData = [requestStr dataUsingEncoding:NSUTF8StringEncoding];
UIImage *img = [UIImage imageNamed:@"2.jpg"];
//NSData *data = UIImagePNGRepresentation(img);
NSData *data = UIImageJPEGRepresentation(img, 1.0);
[asyncSocket writeData:data withTimeout:-1.0 tag:0];
}
接收时的服务器代码...
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
// This method is executed on the socketQueue (not the main thread)
dispatch_async(dispatch_get_main_queue(), ^{
@autoreleasepool {
//NSData *strData = [data subdataWithRange:NSMakeRange(0, [data length] - 2)];
//NSString *msg = [[NSString alloc] initWithData:strData encoding:NSUTF8StringEncoding];
NSImage *sharedImage = [[NSImage alloc] initWithData:data];
//if (sharedImage)
//if (msg)
{
//[self logMessage:msg];
[imageView setImage:sharedImage];
}
/*else
{
[self logError:@"Error converting received data into UTF-8 String"];
}*/
}
});
// Echo message back to client
[sock writeData:data withTimeout:-1 tag:ECHO_MSG];
}
问题:
使用 SimpleHTTPClient 和 EchoServer,我面临以下两个问题,1.) iOS 客户端在 2 或 3 分钟后与 Echo 服务器断开连接......不知道为什么,可能有一些超时。2.)当我传输大尺寸图像时,它接收并加载一些图像,然后在服务器前端日志视图中立即抛出错误为“将接收到的数据转换为 UTF-8 字符串时出错”,请找到参考图像。