服务器不在这里和那里接收write()

时间:2012-03-11 19:01:44

标签: c# tcpclient

我很难搞清楚天气是服务器故障,还是我的应用程序中的错误。如果我查看Wireshark,它看起来好像在将数据发送到服务器;但我怎么能确定收到了呢?

关于服务器的错误..它可能不是,因为它是在浏览器中运行的Java应用程序(我只是为它创建自己的客户端),我可以随时通过浏览器执行命令。它也可以在我的应用程序中运行,但是在向服务器发送2-3个命令(仍然连接)之后,它就会停止工作 - 就像阻止实际发送一样。

希望得到一些指导。也许循环与它有关?如果我重新启动应用程序,命令再次正常工作,所以它会在一段时间后停止工作。实际上这个错误已经超过5年了;但只是再次编译应用程序,它仍然是一个问题: - )

感谢阅读。

我应该提一下,在HandleIncomingMessages()函数中,我让这个线程运行,向服务器发送一个keep-alive(字符“g”)。

// Create send-alive thread.
Thread aliveThread = new Thread((ThreadStart)delegate
{
    do
    {
        Connection.Send("g");
        Thread.Sleep(100000);
    }
    while (true);
});

aliveThread.Name = "Send-alive Thread";
aliveThread.Start();
aliveThread.IsBackground = true;

以下是一些有关它如何运作的片段。

client = new TcpClient(server, port);
//client.NoDelay = true; // both has same result

using (stream = client.GetStream())
using (reader = new StreamReader(stream, Encoding.ASCII))
{
    do
    {
        try
        {
            // Read the stream into the buffer.
            while ((readBuffer = reader.ReadLine()) != null)
            {
                ConnectionHelper.HandleIncomingMessage(readBuffer);
            }
        }
        catch (Exception E)
        {
            WriteLine("CreateConnection() Exception: " + E.Message);
            WriteLine("CreateConnection() Exception: StackTrace: " + E.StackTrace);

            // Exit on error.
            Environment.Exit(1);
        }
    } // do
    while (stream.DataAvailable);

    // Clean up.
    reader.Close();
    stream.Close();
    client.Close();

    WriteLine("Disconnected.");
}

HandleIncomingMessage()只解析数据并将命令发送到下面的Send()函数。

internal static void Send(string message)
{
    if (stream.CanWrite)
    {
        byte[] byteData =
            Encoding.ASCII.GetBytes(message + Environment.NewLine);

        Encoding enc = Encoding.ASCII;
        WriteLine("Send(): " + enc.GetString(byteData));

        // Send <message>
        stream.Write(byteData, 0, byteData.Length);
        stream.Flush();
        return;
    }

    WriteLine("Send(): Exception: Cannot write to stream!");
}

0 个答案:

没有答案