2011-01-16 5 views
0

私はWin32プログラミングの初心者です。Win32でサーバーと対話しています。サーバーの応答はどのように表示されますか?

sprintf(lpszBuff,"HELO Mail-Server\r\n"); 
    send(s,lpszBuff,strlen(lpszBuff),0);  
    recv(s,lpszBuff,100,0); 
    cout << lpszBuff; 

ここでは、ローカルメールサーバーに接続します。バッファには送信したリクエストが含まれ、同じバッファにはブラウザから送信された返信が含まれます。その返信はどのように見えますか? cout <<bufferには出力がありません。 VC++ 2008でこれをやっています。

+0

@Michael Hey ...編集のためのthnx –

+0

ちょっと頭が上がっています:質問の書式設定などに明らかな問題がある場合は、他の誰かの場合に編集する前にページを更新してくださいすでにあなたのためにそれをしています。あなたは私が今行ったばかりのものの上に編集を保存しました。そして、@Michaelはあなたのタイトルとテキストを言い換えてそれを修正しなければなりませんでした。 – slugster

+0

私はそれを覚えています... thnx –

答えて

0

ブロッキングまたはノンブロッキングソケットを使用していますか?戻り値はrecv()とは何ですか?あなたが読めるようになる前に読んでいる可能性があります。recv()はあなたが無視しているエラーコードを返しています。あなたが示したことはあまりにも単純すぎます。適切なソケットコーディングは、ソケットの状態やエラー処理などを検出するためにselect()を使用して、不完全な送信/読み取りが発生したときにループする必要があります。

0

SMTPサーバーと送信者として話すとき、受信/メールサーバーは220最初に送信者にコマンドを送信します。

 R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready 
    S: HELO USC-ISIF.ARPA 
    R: 250 BBN-UNIX.ARPA 

    S: MAIL FROM:<[email protected]> 
    R: 250 OK 

    S: RCPT TO:<[email protected]> 
    R: 250 OK 

    S: RCPT TO:<[email protected]> 
    R: 550 No such user here 

    S: RCPT TO:<[email protected]> 
    R: 250 OK 

    S: DATA 
    R: 354 Start mail input; end with <CRLF>.<CRLF> 
    S: Blah blah blah... 
    S: ...etc. etc. etc. 
    S: . 
    R: 250 OK 

    S: QUIT 
    R: 221 BBN-UNIX.ARPA Service closing transmission channel 

R:受容体 - ローカルSMTPサーバー S:あなたは基本的に

ローカル送信者を必要があることを示し:

recv(s,lpszBuff,200,0); // for 220 
cout << lpszBuff; 
sprintf(lpszBuff,"HELO Mail-Server\r\n"); 
send(s,lpszBuff,strlen(lpszBuff),0);  
recv(s,lpszBuff,100,0); 
cout << lpszBuff; 

あなたのソケットがブロックモードであることを確認してください。

関連する問題