我很难搞清楚天气是服务器故障,还是我的应用程序中的错误。如果我查看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!");
}