tcpclient 如何知道客户端掉线?
我在做一个课题时候,使用服务器端和客户端通信,正常时候,两边都好好的。客户端不断的连接服务器,连接上后就开始发设定好的字符串。服务器端多线程接收这些字符
现在出现有个问题是,服务器端启用一个线程接收一个客户端的连接后,如果这个客户端突然掉线后,线程就卡在stream.Read(bytes, 0, bytes.Length),这个线程也不退出。
下面是服务器端代码,
class MyServer
{
static TcpClient st_client;
static Thread clientservice;
public static void Main()
{
TcpListener server = null;
try
{
Int32 port = 6001;
IPHostEntry ieh = Dns.GetHostEntry(Dns.GetHostName());
IPAddress localAddr = ieh.AddressList[0];
server = new TcpListener(localAddr, port);
server.Start();
while (true)
{
Console.Write("Waiting for a connection... ");
st_client = server.AcceptTcpClient();
Console.WriteLine("Connected!");
clientservice = new Thread(new ThreadStart(ServiceClient));
clientservice.Start();
}
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
finally
{
server.Stop();
}
}
private static void ServiceClient()
{
Console.WriteLine("In Thread!");
TcpClient client = st_client;
Byte[] bytes = new Byte[1024];
String data = null;
NetworkStream stream = client.GetStream();
int i;
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
Console.WriteLine("stream.Read {0}",i);
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
Console.WriteLine("Received: {0}", data);
}
client.Close();
Console.WriteLine("Out Thread,Disconnected!");
}
}