2011-11-10 8 views
1

herehereと記載されているHTTPClientを使用して投稿/取得リクエストを送信する方法を知っています。しかし今では私はストリームソケットをリモートサーバーに接続しています。このソケットを使用して投稿要求を送信したいと思います。目的C:ソケットを使用した投稿/取得リクエスト

これまで私は決してこれをしていませんでした。率直に言って、ソケット経由でPOST/GETのコンセプトを考えたことはありませんでした。しかし、私のグーグルでは、私はPOSTを行うためにとにかくApple..Isによって提供さCFSocketライブラリを使用しています。..ポストはJavaのソケットを介して行われるthis

を私を導い/客観Cでソケットを使用してGET!

答えて

7

まあ私はプレーンなCFSocketを使ってGET/POSTを行うことができました。

-(bool) sendHTTPHeader{ 
    NSMutableString* requestString = [[NSMutableString alloc] init]; 
    NSString *pathString   = [NSString stringWithFormat:@"/remote_function.jsp?argument1=%@&argument2=%@",arg1,arg2 ]; 
    [requestString appendFormat:@"GET %@ HTTP/1.x\r\n",pathString]; 
    [requestString appendFormat:@"HOST:%@",your_host_here]; 
    [requestString appendFormat:@"User-Agent:any\r\n"]; 
    [requestString appendFormat:@"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n\r\n"]; 
    /*If there are more parameters requested by server, put them here..*/ 

    const char* sendString   = [requestString UTF8String]; 

    CFDataRef data     = CFDataCreate(NULL, (const UInt8*)sendString, strlen(sendString)); 
    CFSocketError err    = CFSocketSendData(clientSocket, NULL, data, 0); 
    if (err != kCFSocketSuccess) { 
     NSLog(@"Error in sending data to the server"); 
     CFRelease(data); 
     return FALSE; 
    } 
    [requestString release]; 
    CFRelease(data); 
    return TRUE; 
} 

今すぐあなたのソケットコールバック関数の中で、あなたがこれが誰かを助けるのhttp response..Hopeを読むことができます..あなたの応答の友人のため

void socketCallback(CFSocketRef socket,CFSocketCallBackType type,CFDataRef address,const void *data,void *info){ 
    if (type == kCFSocketDataCallBack) { 
     NSData *nsData    = (NSData *)data; 
     if ([nsData length] == 0) { 
      NSLog(@"Connection dropped by remote socket"); 
      return; 
     } 
     //Control reaches here when there is a chunk of data to read 
     CFDataRef df    = (CFDataRef) data; 
     int len      = CFDataGetLength(df); 
     CFRange range    = CFRangeMake(0,len); 
     UInt8 buffer[len+1]; 

     if(len <= 0) { 
      NSLog(@"No data read"); 
      return;   
     } 
     memset((void*)buffer,0,sizeof(buffer)); 
     CFDataGetBytes(df, range, buffer); 
     NSString *byteString   = [[NSString alloc] initWithBytes:buffer length:len encoding:NSUTF8StringEncoding]; 
     NSLog(@"byte string is : %@",byteString); 
     [byteString release]; 
    } 
} 
+0

この例ではUpvotedは私の問題を修正しました(私は構文の問題があった)しかし、私は少しあなたの要求を微調整しなければならなかった - "HOST"の後に入力します。ちょうど私がそれを言いたいと思った。私はそれがなければ、悪い要求エラーを持っています。 –

3
+0

おかげで、私の質問は、GET/POSTを行う方法についてでしたが単純なCFSocketを使用してリクエストします。私はすでにこれらのリンクの両方を見てきました。これは非常に役に立ちました。しかし、2番目のリンクにポスト/ソケットを使用することについては何もありません。最初のリンクには有望なCFHTTPに関する情報がありますが、私はプレーンなCFSocketを使って自分の要求を完了しました。私の答えを見てください。私は明日私の答えを受け入れるようにしていますので、今私はそれをすることを許可しません – Krishnabhadra

関連する問題