【发布时间】:2009-08-17 20:13:31
【问题描述】:
我有以下服务器应用程序代码:
TcpListener recSock = new TcpListener(400);
recSock.Start();
TcpClient client = recSock.AcceptTcpClient();
NetworkStream netStream = client.GetStream();
Byte[] data = new Byte[256];
int i;
while((i = netStream.Read(data, 0, data.Length)) != 0) {
string cmd = ASCIIEncoding.ASCII.GetString(data, 0, i);
Console.WriteLine(cmd);
if(cmd == "R") {
RestartScheduler();
}
}
client.Close();
客户端看起来像:
TcpClient client = new TcpClient();
client.Connect("VM-SCHEDULER", 400);
NetworkStream netStream = client.GetStream();
Byte[] data = ASCIIEncoding.ASCII.GetBytes("R");
netStream.Write(data, 0, data.Length);
netStream.Flush();
client.Close();
客户端第一次连接读取“R”命令并调用RestartScheduler()方法时一切正常,但是所有后续命令都失败,直到服务器重新启动。
我在第一次尝试后使用 telnet 连接到服务器,但它仍在侦听端口。
我哪里错了?
编辑:
基本上我想要完成的是服务器将始终监听,然后客户端将连接发送“R”命令然后关闭连接。客户端必须能够随时连接到服务器才能发出命令。任何时候都只会有 1 个客户。
【问题讨论】:
-
在这种情况下,请查看我的更新答案。