【发布时间】:2011-08-17 21:40:39
【问题描述】:
我对网络编程很陌生,我对这段代码有几个问题:
if (client.Connected)
{
ChangeLabel("Mit dem Server verbunden...");
NetworkStream stream = client.GetStream();
FileStream fs = null;
try
{
fs = new FileStream("Mapeditor2.exe", FileMode.Create);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
Environment.Exit(0);
}
byte[] bResponse = new byte[16];
stream.Read(bResponse, 0, 16);
string sResponse = System.Text.Encoding.UTF8.GetString(bResponse);
int NoOfPackets = Convert.ToInt32(sResponse);
float progress = 0;
float progressPercent = 100.0f / (float)NoOfPackets;
byte[] buffer = new byte[128];
int bytesRead;
for (int i = 0; i < NoOfPackets; i++)
{
bytesRead = stream.Read(buffer, 0, 128);
fs.Write(buffer, 0, bytesRead);
progress += progressPercent;
ChangeProgress((int)progress);
}
fs.Close();
stream.Close();
}
(Client是一个TcpClient,一个到服务器的连接)
现在我尝试为我的地图编辑器制作更新程序,如您所见。 首先我发送一个 16 字节的消息,其中包含随后将发送的包的数量(Mapeditor.exe 文件!),这是用于客户端的进度条...
有没有动态的方法来做到这一点? (不是说“读取 16 字节数组”并动态地将文本和文件写入流中,客户端会自动知道何时必须读取文本以及何时读取文件)
我希望如此,或者还有其他编写更新程序/修补程序的方法吗?游戏开发者如何做到这一点?
谢谢!
PS:有什么方法可以确保客户收到所有包裹,如果丢失了,只发送这些并放在一起?
【问题讨论】: