0
複数のクライアントに接続するサーバーを実装しました。サーバーはテキストファイルを読み取り、最初の行をクライアントに送信し、6秒待って次の行を送信します。ボタンがクリックされた場合にのみ、行を送信したいと思います。それ、どうやったら出来るの?c#ボタンごとにファイルを1行ずつ読む
私のボタンイベントでは、サーバーはクライアントからの他の接続要求を処理する必要があるため、このメソッドをタスクに入れました。
サーバー側:
private void SendFilesButton_Click(object sender, EventArgs e)
{
Task SendTask = Task.Factory.StartNew(() => SendFiles());
}
public void SendFiles()
{
try
{
tcpClient = tcpListener.AcceptTcpClient();
if (tcpClient.Connected)
{
using (StreamReader reader = new StreamReader("C:\\Users\\Chudnofsky\\Desktop\\Projekt\\Neu\\Messwerte.txt"))
{
lock (this)
{
string line;
for (int i = 1; i < 2400; i++)
{
line = reader.ReadLine() + Environment.NewLine;
stream = tcpClient.GetStream();
byte[] toSend = Encoding.ASCII.GetBytes(line);
stream.Write(toSend, 0, toSend.Length);
stream.Flush();
i++;
Thread.Sleep(6000);
}
}
}
}
}
catch (Exception)
{
System.Windows.Forms.MessageBox.Show("Datei konnte nicht gelesen werden!");
}
}
スキャンファイル毎に多少高価です。 ..おそらくファイルが小さくなる可能性があるOPの場合は問題ありません。良いコードのために、ある種の非同期イテレータを書くでしょう。 –
ええ、私は同意する、最初の方法は、パフォーマンスを念頭に置いている。 –