0

我正在使用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 字符串时出错”,请找到参考图像。 在此处输入图像描述

4

0 回答 0