c# TcpListener做服务器问题
本人是个新手。第一次用TcpListener做服务器。发现一个问题。当服务器监听端口时,客户端断开时在网络连接处还可以看到原本客户端连接的信息。当新的客户端连接时又出现一个新的连接,在此我想知道如何去掉之前的客户端连接。。因为我是新手。各位大大能不能帮我看看我的程序那儿出了问题。最好能有程序上来以下是我编的程序(本人不会异步。所以用了同步的)
//定义
delegate void AddString_del(string str);
AddString_del addDel;//该代理用于向接收窗体添加数据
Thread thListen;//监听线程
TcpClient tcpClient;
TcpListener serverListener;
bool islian = false;
#region 点击GPRS打开事件
/// <summary>
/// 点击GPRS打开事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnOpenGPRS_Click(object sender, EventArgs e)//
{
IPAddress serverIp=null;
int port = 0;
serverIp = IPAddress.Parse(this.IP.Text.ToString());
port = Convert.ToInt32(this.port.Text.ToString());
IPEndPoint local = new IPEndPoint(serverIp, port);
serverListener = new TcpListener(local);
serverListener.Start();
//
thListen = new Thread(new ThreadStart(ServerListen));
thListen.Start();
}
#endregion
#region 监听GPRS客户端
/// <summary>
/// 监听GPRS客户端
/// </summary>
private void ServerListen()
{
while (true)
{
tcpClient = serverListener.AcceptTcpClient();
Thread tcpthread = new Thread(DoSomeThing);//创建新线程,这样程序可以立刻进入下一次while循环,处理新的客户端接入
tcpthread.Start(tcpClient);//把新获得的连接作为参数传过去(其实也可以不传,因为你的tcpClient是全局的)
}
}
#endregion
#region 为每一个客户端接入创建的处理线程
///
///为每一个客户端接入创建的处理线程
///
private void DoSomeThing(object parmater)
{
TcpClient newTcpClient = parmater as TcpClient;//将参数转换成TcpClinet
int a = 0;
byte[] buffer = new byte[1024];
NetworkStream stream = newTcpClient.GetStream(); //
if (newTcpClient.Connected)
{
islian = true;
}
else
{
islian = false;
}
while (islian)
{
//Thread.Sleep(1000);
try
{
a = stream.Read(buffer, 0, 1024);
string temp = "", message = "";
if (a > 0)
{
islian = true;
temp = System.Text.Encoding.ASCII.GetString(buffer, 0, a);
// message += temp;
message = Encoding.ASCII.GetString(buffer, 0, a);
textBox111.Invoke(addDel, temp + "\n");
//MessageBox.Show("接收到" + message);
stream.Flush();
}
else
{
islian = false;
newTcpClient.Close();
break;
//stream.Flush();
//MessageBox.Show("断开");
}
//stream.Close();//这个如果使用的话,服务器一接到数据,客户端就会被关掉
}
catch (Exception)
{
//TODO:接收数据线程异常处理
if (newTcpClient != null)
{
newTcpClient.Close();
}
islian = false;
//MessageBox.Show(ex.Message+"cuowu");
//textBox3.Invoke(addDel, ex.Message);
break;
}
}
}
#endregion
以上就是我所编的程序。。真的不知道如何在客户端断开后关闭连接。。希望有人能帮看看问题出在那儿