1

POSTリクエストをサーバーに送信するプログラムがあります。
cURLを使用してリクエストを送信しています。
私のプログラムはWindowsとLinuxで実行されます(現時点ではUbuntu 9.10)。

サーバーがリクエストを受信すると、サーバーはそれを処理し、エラーコード(エラーがない場合は0000)とエラーの説明(存在する場合)を返します。
サーバーのWebサーバーはMicrosoftIISです。

Windowsでプログラムを実行すると、うまく機能します。
しかし、Linuxでプログラムを実行すると、30秒間ハングアップし(cURLのタイムアウト)、「5バイトを受信して​​30000ミリ秒後に操作がタイムアウトしました」というエラーが返されます。
サーバー側の問題を知っているように、サーバーは応答のサイズを送信せず、ソケット接続を閉じません。

cURLログ(Linuxから):


11:00:09.544    Process()       curl: libcurl/7.19.5 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.15
11:00:09.941    DebugCallback() About to connect() to sms1.redoxygen.net port 80 (#0)
11:00:09.941    DebugCallback() Trying 203.145.62.146...
11:00:10.084    DebugCallback() Connected to sms1.redoxygen.net (203.145.62.146) port 80 (#0)
11:00:10.085    DebugCallback() POST /sms.dll?private&type=26 HTTP/1.1
                                Host: sms1.redoxygen.net
                                Content-Length: 244
11:00:10.086    DebugCallback() [244 bytes of DATA]
11:00:10.087    ReadCallback()  No more data to send
11:00:10.292    WriteCallback() HTTP/1.1 200 OK
11:00:10.293    DebugCallback() Content-Type: text/html
11:00:10.294    DebugCallback() no chunk, no close, no size. Assume close to signal end
11:00:10.294    WriteCallback() 
11:00:10.466    DebugCallback() 0000 
11:00:40.500    DebugCallback() Operation timed out after 30000 milliseconds with 5 bytes received
11:00:40.501    DebugCallback() Closing connection #0

Windowsのログはほとんど同じですが、タイムアウトはありません。「0000」を受信した直後にソケットを閉じます。

「0000」を取得すると、受信したデータを分析して接続を閉じることができますが、これは「ダーティハック」です。

何か案は?

4

2 に答える 2

0

問題の理由を見つけました。
理由は-VirtualBoxです。
私はVirtualBoxを使用してUbuntuを実行しています。プログラムを実際の(仮想ではない)PCから実行すると、(Ubuntuでも)正常に動作します。VirtualBoxの最新バージョンにバグがあるようです。

于 2010-02-25T03:28:25.777 に答える
0

あなたの質問はあなたがlibcurlをどのように使うかを明らかにしていないので、これは多くの推測なしに正確に答えるのは簡単ではありません。また、これらの欠落している詳細のいくつかは、アプリがLinuxとWindowsで異なる動作をする理由を明らかにすると思います。

リクエストはコンテンツの長さ244を送信しますが、表示する出力にはリクエスト本文が含まれていません。なぜですか?私には、サーバーはそのデータが到着するのを合法的に待っているように見えますが、あなたはそれを提供していません。

だから、あなたは奇妙なリクエストを送信します。サーバーは奇妙な応答で応答します。ガベージイン、ガベージアウトだと思います。

于 2010-02-22T08:55:08.970 に答える