私は C++ で小さなネットワーク プログラムを書いています。とりわけ、Twitter のプロフィール写真をダウンロードする必要があります。URL のリスト (stl::vector) があります。次のステップは、for ループを作成し、ソケットを介して GET メッセージを送信し、画像を別の png ファイルに保存することだと思います。問題は、最初のメッセージを送信し、回答セグメントを受信し、png データを保存すると、すべて問題ないように見えることです。しかし、次の反復で、同じソケットを介して送信された同じメッセージは、recv() 関数によって 0 受信バイトを生成します。サイクル本体にソケット作成コードを追加することで問題を解決しましたが、ソケットの概念について少し混乱しています。メッセージを送信すると、ソケットを閉じて再作成し、次のメッセージを同じサーバーに送信する必要があるようです(次の画像を取得するため)。これはソケットの正しい方法ですか '
前もって感謝します。
UPD:これは、ソケットを作成するループを含むコードです。
// Get links from xml.
...
// Load images in cycle.
int i=0;
for (i=0; i<imageLinks.size(); i++)
{
// New socket is returned from serverConnect. Why do we need to create new at each iteration?
string srvAddr = "207.123.60.126";
int socketImg = serverConnect(srvAddr);
// Create a message.
...
string message = "GET " + relativePart;
message += " HTTP/1.1\r\n";
message += "Host: " + hostPart + "\r\n";
message += "\r\n";
// Send a message.
BufferArray tempImgBuffer = sendMessage(sockImg, message, false);
fstream pFile;
string name;
// Form the name.
...
pFile.open(name.c_str(), ios::app | ios::out | ios::in | ios::binary);
// Write the file contents.
...
pFile.close();
// Close the socket.
close(sockImg);
}