【发布时间】:2019-07-03 00:46:09
【问题描述】:
我有一些通过 TCP 传输的文件。但是,当我尝试执行它们时,我会弹出一个窗口屏幕,说我应该联系开发人员为我的电脑获取合适的版本。文件应该正确传输,所以我想知道问题出在哪里。
服务器操作系统:Windows Server 2016
我的电脑操作系统:Windows 10
服务器代码
private void SendLauncherFiles(NetworkStream stream)
{
TCPManager manager = new TCPManager();
Console.WriteLine("Sending Launcher files");
string path = System.AppDomain.CurrentDomain.BaseDirectory;
path += "LauncherFiles\\";
string[] extensions = { "LegitAimLauncher.exe", "Bleak.dll", "Jupiter.dll", "PeNet.Asn1.dll", "PeNet.dll" };
for(int i = 0; i < extensions.Length; i++)
{
path += extensions[i];
byte[] bFileData = File.ReadAllBytes(path);
string newPath = path.Replace(extensions[i], "");
path = newPath;
manager.SendInt(bFileData.Length, stream);
stream.Write(bFileData, 0, bFileData.Length);
}
}
客户端代码
private void ReceiveFiles(NetworkStream stream)
{
TCPManager manager = new TCPManager();
string path = System.AppDomain.CurrentDomain.BaseDirectory;
path += "LauncherFiles\\";
string[] extensions = { "LegitAimLauncher.exe", "Bleak.dll", "Jupiter.dll", "PeNet.Asn1.dll", "PeNet.dll" };
for(int i = 0; i < extensions.Length; i++)
{
path += extensions[i];
int length = manager.GetInt(stream);
byte[] bFileData = new byte[length];
stream.Read(bFileData, 0, bFileData.Length);
File.WriteAllBytes(path, bFileData);
string newPath = path.Replace(extensions[i], "");
path = newPath;
}
}
TCPManager
public void SendInt(int data, NetworkStream stream)
{
byte[] bData = BitConverter.GetBytes(data);
stream.Write(bData, 0, bData.Length);
}
public int GetInt(NetworkStream stream)
{
byte[] bData = new byte[sizeof(int)];
stream.Read(bData, 0, bData.Length);
int Data = BitConverter.ToInt32(bData, 0);
return Data;
}
编辑:忘记检查文件大小。所有文件的大小都是零字节,因此发送时一定有错误。
【问题讨论】:
-
这可能是两个问题之一:文件未正确发送或客户端计算机上缺少程序的先决条件。要查看文件是否正确到达那里,您可以在服务器和客户端上的文件上使用 PowerShell 的 Get-FileHash 并查看它们是否匹配(您至少需要 PowerShell v4)。
-
要查看是否缺少先决条件,然后通过其他方法复制文件并尝试运行它,看看是否出现相同的错误。
标签: c# wpf networking tcp stream