【发布时间】:2013-01-17 05:36:51
【问题描述】:
在 Win7 x64 上的 Visual Studio 2012 Ult 中使用 .NET 4.5 中的 C#。
我正在尝试让服务器通过System.Net.Sockets.Socket.SendFile(string filename) 方法传输文件并让客户端接收它。客户端将接收到的字节附加到它创建的文件的末尾,以在其一侧重建发送的文件。这一切都有效 - 至少对于基本的文本文件。
当我尝试发送 *.exe 文件时,收到的 *.exe 不起作用。在 Notepad++ 中打开源 *.exe 和客户端副本,文件似乎是正确的,只是一些看起来很奇怪的字符不正确。我的问题是如何解决这个问题?
由于服务器代码实际上只是使用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); 可能是问题所在?
【问题讨论】:
-
似乎有点奇怪,您正在发送和接收文本。
-
正如其他评论提到的,您的问题是文本。 .exe 不是下一个文件。这是二进制数据。