:は、ソケットを使用してネットワーク経由で画像を送信する、データを台無し
をファイルの先頭、その後、正しく転送されます残りは次のような結果につながるめちゃめちゃます:
私はファイルを待ち、サーバ、およびサーバに接続し、ファイルtranferを開始し、クライアントを持っています。クライアントが接続を閉じると、サーバーはファイルの送信が完了したことを認識して保存します。
サーバ側のすべてのデータは、前にファイルに書き込まれ、バイトのリスト(GLOBAL.FILE_BUFFER)に収集されている:
public void OnDataReceived(IAsyncResult asyn)
{
try
{
SocketPacket socketData = (SocketPacket)asyn.AsyncState;
int iRx = socketData.m_currentSocket.EndReceive(asyn);
for (int f = 0; f < iRx; f++)
{
GLOBAL.FILE_BUFFER.Add(socketData.dataBuffer[f]); // Collect all the incoming data into a buffer
}
WaitForData(socketData.m_currentSocket, socketData.socket_id, REQUEST_INDEX_ID);
}
catch (ObjectDisposedException)
{
}
catch (SocketException se)
{
}
}
これは私がファイルへの書き込みに使用しているコードです:
public static void ByteArrayToFile(string _FileName, byte[] _ByteArray, int BytesRead)
{
System.IO.FileStream _FileStream = new System.IO.FileStream(_FileName, System.IO.FileMode.Create, System.IO.FileAccess.Write);
_FileStream.Write(_ByteArray, 0, BytesRead);
_FileStream.Close();
}
私は同じ側で同じByteArrayToFile関数を使用し、正しく画像を保存しました。クライアントは正しいデータを送信しているように見えますが、サーバがそれを受信すると、データが乱れてしまいます。私は、クライアントが、サーバによって、両端にファイルを保存し、それらを比較した:
お知らせ下部中央にある紫色のライン/バー。データがそこに一致していないことを示しますが、最初に完全に一致することに気付きます。
リストを使用しているので、何も読んで残った!あなたは解決策を持っていない場合は、私に任意のヒントを教えてくださいできますか?この問題は数週間にわたって私を悩ませていました。ありがとう!
送信したバイト[]のデータが、画像によって生成されたバイト[]と同じであることを確認しましたか?バイトを生成するコードを投稿する –
@Ramhound申し訳ありませんが、あなたは何を意味するのか分かりません。クライアントはWebからイメージを取り出し、それをサーバーにアップロードします。 httpwebresponseからクライアント側のすべてのデータをバイトリストで収集すると、イメージが保存され、有効で保存され、動作することが確認されます。それがあなたの質問だったら教えてください。ありがとう! – user1192403