我正在尝试构建一个服务器,用于接收客户端通过网络发送的文件。如果客户端决定一次只发送一个文件,那么没有问题,我会按照预期获得该文件,但是如果客户端尝试发送多个文件,我只会收到第一个文件。
以下是服务器代码: 我为每个连接的客户端使用一个线程。
以下代码是ClientHandler类的一部分。
上传方法:
以下是服务器代码: 我为每个连接的客户端使用一个线程。
public void ProcessClients()
{
while (IsListening)
{
ClientHandler clientHandler = new ClientHandler(listener.AcceptTcpClient());
Thread thread = new Thread(new ThreadStart(clientHandler.Process));
thread.Start();
}
}
以下代码是ClientHandler类的一部分。
public void Process()
{
while (client.Connected)
{
using (MemoryStream memStream = new MemoryStream())
{
int read;
while ((read = client.GetStream().Read(buffer, 0, buffer.Length)) > 0)
{
memStream.Write(buffer, 0, read);
}
if (memStream.Length > 0)
{
Packet receivedPacket = (Packet)Tools.Deserialize(memStream.ToArray());
File.WriteAllBytes(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), Guid.NewGuid() + receivedPacket.Filename), receivedPacket.Content);
}
}
}
}
在第一次迭代中,我收到了第一个文件,但之后就没有收到任何东西。我尝试在每次迭代结束时使用Thread.Sleep(1000),但没有成功。
另一方面,我有这段代码(针对客户端)
.
.
client.Connect();
foreach (var oneFilename in fileList)
client.Upload(oneFilename);
client.Disconnect();
.
.
上传方法:
public void Upload(string filename)
{
FileInfo fileInfo = new FileInfo(filename);
Packet packet = new Packet()
{
Filename = fileInfo.Name,
Content = File.ReadAllBytes(filename)
};
byte[] serializedPacket = Tools.Serialize(packet);
netStream.Write(serializedPacket, 0, serializedPacket.Length);
netStream.Flush();
}
netStream(NetworkStream)在连接方法上打开,在断开连接时关闭。
黑洞在哪里?我能像我正在尝试的那样发送多个对象吗?
感谢您的时间。