ネットワーク経由でクライアントから送信されたファイルを受信するサーバーを構築しようとしています。クライアントが一度に 1 つのファイルを送信することにした場合、問題はありません。期待どおりにファイルを取得しますが、複数のファイルを送信しようとすると、最初のファイルしか取得しません。
サーバーコードは次のとおり です。接続されたクライアントごとに1つのスレッドを使用しています
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) は Connect メソッドで開かれ、Disconnect で閉じられます。
ブラックホールはどこ?やろうとしているように、複数のオブジェクトを送信できますか?
御時間ありがとうございます。