私はクライアントサーバーユーティリティアプリケーションを作成しています。彼らはTcpClient
/Stream
(クライアント)とTcpListener
/Socket
(サーバー)を通じて通信します。私はこれらの2つの間でバイトを前後に送ります、そして、私は問題があるところに来ます。クライアントはサーバーに信号を送信します(たとえばStartCounting
)。クライアントはいくつかのことをやり始めます(ゼロからカウントアップ)。サーバは、StartCounting
を受信するとすぐに同じことを行います。さて、両側がカウントしている間、それぞれの側がカウントを中断するかもしれません(例えば、returnを押すことによって)。一方の側が停止すると、相手側にメッセージを送信して停止します。いくつか試行されたコードがあります(クライアントの場合、唯一の違いはバイト配列の読み方です)。C#ネットワークプログラミング - リスニング
private void WaitForBye(object source, ElapsedEventArgs e)
{
byte[] responseBytes = new byte[1000];
int k = stream.Read(responseBytes, 0, 1000);
String response = ASCIIEncoding.ASCII.GetString(responseBytes);
response = response.Substring(0, k);
String from, to, message;
extractData(response, out message, out from, out to);
Console.WriteLine(++counter);
if (message == "BYE")
isBye = true;
}
bTimer = new Timer();
bTimer.Elapsed += new ElapsedEventHandler(WaitForBye);
bTimer.Interval = 1000;
bTimer.Enabled = true;
Console.WriteLine("Press return when finished.");
while (Console.ReadLine() != "" && !isBye) ;
どうすればよいですか?好ましくはスレッドを使用せずに、代わりにTimer
を使用します。
@offtopic:これは私の最初のネットワーキングプログラムであり、私は自分のやり方を最低レベルから上げたいと思っています。 –
さて、このルート(ボトムアップ)に行くと、多くの低レベルのスキルと理解力が提供されますが、それは確かです。あなたがそれを理解したいのであれば恐ろしいことではありません。 WCFを使用すると、プロダクションをすばやく素早く開始でき、初心者の落とし穴から守ることができます。それは本当のオーバーヘッドを追加します。しかし、MassTransitやProtocol Buffersのような他のコミュニケーション・フレームワークもあります。 – gjvdkamp