C#网络编程 - 听力

时间:2011-01-17 15:30:26

标签: c# tcp network-programming

我正在编写客户端 - 服务器实用程序。他们通过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代替。

2 个答案:

答案 0 :(得分:0)

不要以为你可以在同一个帖子上同时计算和收听,所以我猜你必须考虑使用这个线程。使用Tasks,C#4.0使这种东西变得更容易。

有点偏离主题,但你为什么要使用套接字? WCF不会在这里工作吗?它可以为您节省大量的打字费用。

祝你好运,

GJ

答案 1 :(得分:0)

您可以使用stream.peek来检查是否有要读取的数据。 否则你的代码会等到有数据,并且计数不起作用。 请记住,您阅读的信息可能不完整,因此请勿将此方法用于关键任务情况。

使用WCF可以节省输入,但会添加到通信的有效负载中。

更迭。