2011-12-15 15 views
0

GCDAsyncSocketを使用してソケット経由でメッセージを送信する際に問題が発生しました。私は接続を確立し、サーバーにメッセージを送信しようとしますが、アプリケーションが終了するとメッセージが送信されています。私は前にそれを行う方法が必要です。私は[asyncSocket disconnect]を試みた。しかし、何も変わっていない...助けてください。ここに私のコードの一部です:GCDAsyncSocketメッセージを送信する

NSError *err = nil; 
asyncSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; 
if(![asyncSocket connectToHost:@"localhost" onPort:7777 error:&err]){ 
// If there was an error, it's likely something like "already connected" or "no delegate set" 
    NSLog(@"I goofed: %@", err); 
} 
NSString *requestStr = @"<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><root><service>1</service><type>1</type><userProperties><username>someusername</username></userProperties></root>"; 
NSData *requestData = [requestStr dataUsingEncoding:NSUTF8StringEncoding]; 

[asyncSocket writeData:requestData withTimeout:1.0 tag:0]; 

NSData *receivedData; 
[asyncSocket readDataToData:receivedData withTimeout:2.0 tag:0]; 
NSString *httpResponse = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding]; 
NSLog(@"%@",httpResponse); 
+0

私の非常によく似た、答えられた質問も見てください:http://stackoverflow.com/questions/11998408/having-trouble-programming-streams – khaliq

答えて

2

あなたの問題は、「readDataToData:receivedData」である - あなたはそれが「何を」見つけなくなるまでデータを読み取るためにGCDAsyncSocketを求めている - receivedDataは不明です。一つは、通常、それが読み取りを終了するCR/LFの組み合わせを取得するまで読み込みます

[asyncSocket readDataToData:[GCDAsyncSocket CRLFData] withTimeout:-1 tag:0]; 

のようなものを使用しています。また、ヘッダーを読んで、読み取るデータの長さを判断することもできます。

あなたは読んでから戻るときにそれを伝える必要があります。また、アプリケーションが終了したときにソケットが閉じられているため、アプリケーションが終了したときにのみ返されます。

関連する問題