在VS2005下开发了一个客户端与服务端通信的程序!
我在客户端程序中使用了多线程!
可是在客户端程序关闭后,仍占用系统部分系统资源!
只有在服务端程序进程终止之后,客户端资源才可以得到释放!
请问是什么原因?
客户端程序代码:
private IPAddress myIP = IPAddress.Parse("192.168.0.1");
private IPEndPoint MyServer;
private Socket sock;
private bool bb = true;public string recvStr = ""; //接收到字符串public Thread thread;private void btnCon_Click(object sender, EventArgs e)
{
MyServer = new IPEndPoint(myIP, Int32.Parse("8888"));
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Connect(MyServer); this.statusBar1.Text = "与主机连接成功!"; thread = new Thread(new ThreadStart(targett));
// thread.IsBackground = true;
thread.Start();
}
public delegate void MyOkInVoke(string str);private void targett()
{
while (bb)
{
Byte[] bbb = new Byte[1024];
string aa = "";
int bytes;
bytes = sock.Receive(bbb, bbb.Length, 0);
aa += System.Text.Encoding.Default.GetString(bbb, 0, bytes); recvStr = recvStr+aa;
//传递参数
MyOkInVoke okCon = new MyOkInVoke(CreateNewForm);
this.BeginInvoke(okCon, new object[] { recvStr });
}
}
public void CreateNewForm(string str)
{
this.txtRecv.Text = recvStr; //刷新接收数据文本框
this.txtRecv.Update();
}private void btnSend_Click(object sender, EventArgs e)//发送数据
{
Byte[] bytee = new Byte[1024];
string send = this.txtSend.Text.ToString();
bytee = System.Text.Encoding.Default.GetBytes(send.ToCharArray());
sock.Send(bytee, bytee.Length, 0);
}
private void btnClose_Click(object sender, EventArgs e)//关闭连接中断线程
{
try
{
sock.Close();
thread.Abort(); this.statusBar1.Text = "与服务器断开连接!";
}
catch { MessageBox.Show("连接尚未建立,断开无效!"); }
}
我在客户端程序中使用了多线程!
可是在客户端程序关闭后,仍占用系统部分系统资源!
只有在服务端程序进程终止之后,客户端资源才可以得到释放!
请问是什么原因?
客户端程序代码:
private IPAddress myIP = IPAddress.Parse("192.168.0.1");
private IPEndPoint MyServer;
private Socket sock;
private bool bb = true;public string recvStr = ""; //接收到字符串public Thread thread;private void btnCon_Click(object sender, EventArgs e)
{
MyServer = new IPEndPoint(myIP, Int32.Parse("8888"));
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Connect(MyServer); this.statusBar1.Text = "与主机连接成功!"; thread = new Thread(new ThreadStart(targett));
// thread.IsBackground = true;
thread.Start();
}
public delegate void MyOkInVoke(string str);private void targett()
{
while (bb)
{
Byte[] bbb = new Byte[1024];
string aa = "";
int bytes;
bytes = sock.Receive(bbb, bbb.Length, 0);
aa += System.Text.Encoding.Default.GetString(bbb, 0, bytes); recvStr = recvStr+aa;
//传递参数
MyOkInVoke okCon = new MyOkInVoke(CreateNewForm);
this.BeginInvoke(okCon, new object[] { recvStr });
}
}
public void CreateNewForm(string str)
{
this.txtRecv.Text = recvStr; //刷新接收数据文本框
this.txtRecv.Update();
}private void btnSend_Click(object sender, EventArgs e)//发送数据
{
Byte[] bytee = new Byte[1024];
string send = this.txtSend.Text.ToString();
bytee = System.Text.Encoding.Default.GetBytes(send.ToCharArray());
sock.Send(bytee, bytee.Length, 0);
}
private void btnClose_Click(object sender, EventArgs e)//关闭连接中断线程
{
try
{
sock.Close();
thread.Abort(); this.statusBar1.Text = "与服务器断开连接!";
}
catch { MessageBox.Show("连接尚未建立,断开无效!"); }
}
解决方案 »
- 求助,如何抓取网页信息,做一个winform程序来实现登录,发帖等,比如铁路购票那个软件
- 救命:求教怎样就图片的大小!!!
- 多线程问题?高手帮帮忙啊!
- 请问从SQL2000 建的数据库附加到2005后关系视图打不开.
- 新人请教各位,一个小程序的开发。
- 关于数据库的一个问题请高手帮忙
- 找出某用户连续有五天的存款记录,并且这五天的记录金额相加大于10000
- 找工作专贴!帮忙顶下撒!
- 我想做一个客户端和服务器之间通信的程序,请大家帮帮我,散分!
- 组件Timer和窗体Timer有区别吗?
- WEB程序点击"发布"后,生成的网站,在我的机子可以运行,传到网上,却提示:Server Application Unavailable
- WebService运行正常,但有时无故出错,请问是怎么回事!
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) 最新版本:20070212http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
{
Byte[] bbb = new Byte[1024];
string aa = "";
int bytes;
bytes = sock.Receive(bbb, bbb.Length, 0);
aa += System.Text.Encoding.Default.GetString(bbb, 0, bytes); recvStr = recvStr+aa;
//传递参数
MyOkInVoke okCon = new MyOkInVoke(CreateNewForm);
this.BeginInvoke(okCon, new object[] { recvStr });
} 问题在这,因为你的程序和此线程是并行的,所以程序退出后,此程序并没有结束.一般方法是,程序退出前要向server发退出命令,server回一个确认后,把bb=false;就可以正常退出了。