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 文字列に変換中にエラーが発生しました」というエラーがすぐにスローされます。参照画像を見つけてください。