我正在编写客户端 - 服务器实用程序。他们通过TcpClient
/ Stream
(客户端)和TcpListener
/ Socket
(服务器)进行通信。我在这两个之间来回发送字节,然后我来到我遇到问题的部分;客户端向服务器发送信号(比如StartCounting
)。客户端开始做一些事情(比如从零开始计数)。服务器收到StartCounting
后立即执行相同操作。现在,虽然双方都在计算,但每一方都可能会中断计数(例如按下返回)。当一方停止时,它会向另一方发送一条消息以停止。这是一些尝试的代码(对于客户端,但唯一的区别是它们如何读取字节数组):
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
代替。
答案 0 :(得分:0)
不要以为你可以在同一个帖子上同时计算和收听,所以我猜你必须考虑使用这个线程。使用Tasks,C#4.0使这种东西变得更容易。
有点偏离主题,但你为什么要使用套接字? WCF不会在这里工作吗?它可以为您节省大量的打字费用。
祝你好运,GJ
答案 1 :(得分:0)
您可以使用stream.peek来检查是否有要读取的数据。 否则你的代码会等到有数据,并且计数不起作用。 请记住,您阅读的信息可能不完整,因此请勿将此方法用于关键任务情况。
使用WCF可以节省输入,但会添加到通信的有效负载中。
更迭。