Win7 x64 上の Visual Studio 2012 Ult の .NET 4.5 で C# を使用します。
System.Net.Sockets.Socket.SendFile(string filename)
メソッドを介してサーバーにファイルを送信させ、クライアントにそれを受信させようとしています。クライアントは、受信したバイトを作成したファイルの末尾に追加して、送信したファイルをクライアント側で再構築します。これはすべて機能します - 少なくとも基本的なテキスト ファイルの場合。
*.exe ファイルを送信しようとすると、受信した *.exe が機能しません。ソース *.exe とクライアント側のコピーの両方を Notepad++ で開くと、一部の奇妙な文字が正しくないことを除けば、ファイルは正しいように見えます。私の質問は、どうすればこれを修正できますか?
サーバーコードは実際にはSocket.SendFile(string filename)
、他の関連オプションを使用せずにファイルを送信しているだけなので、クライアントが問題であると想定しています。
クライアント側:
private void ListenAndReport(Socket socket)
{
EndPoint remoteEndPoint = socket.RemoteEndPoint;
ReceiveObject obj = new ReceiveObject(socket);
socket.BeginReceive(obj.buffer, 0, packetSize, SocketFlags.None, new AsyncCallback(ReceiveFromListen), obj);
}
private void ReceiveFromListen(IAsyncResult ar)
{
ReceiveObject obj = (ReceiveObject)ar.AsyncState; //ReceiveObject just holds a byte[packetSize] buffer and a Socket
string received = Encoding.UTF8.GetString(obj.buffer);
WriteToFile(received);
obj.socket.EndReceive(ar); //!!! necessary? Doesn't seem to make a difference.
ListenAndReport(obj.socket);
}
private void WriteToFile(string text)
{
fileStream.Write(text);
fileStream.Flush();
}
のエンコーディングstring received = Encoding.UTF8.GetString(obj.buffer);
が間違っていると思いますが、すべての Encoding.something オプションを試しましたが、どれもファイルを正しく送信していません。
または、ファイル ライター にSystem.IO.TextWriter fileStream = File.AppendText(string filename);
問題があるのでしょうか。