0

CocoaAsyncSocket-masterソースの GCD コードを使用しています。サーバー バージョン アプリケーションを実行するために「EchoServer」を使用し、iOS デバイスで実行するために「SimpleHTTPClient」クライアント アプリケーションを使用しています。提供されたサンプルを使用して、デスクトップ サーバー アプリと iOS クライアント アプリを実行し、問題なく接続できました。

既存のクライアント プロジェクトで送信している http ヘッダーの代わりに、 UIImage データをサーバー アプリに送信しようとしています。そのため、クライアント側で以下のコードに従って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 を使用して、次の 2 つの問題に直面しています。2.) 大きなサイズの画像を転送し、画像の一部を受信して​​ロードすると、サーバー フロント エンドのログ ビューで「受信したデータを UTF-8 文字列に変換中にエラーが発生しました」というエラーがすぐにスローされます。参照画像を見つけてください。 ここに画像の説明を入力

4

0 に答える 0