在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("连接尚未建立,断开无效!"); }
}
解决方案 »
- VS2012的项目管理与SVN间的关系
- DataList中判断绑定数据的状态
- 求高手修改代码,SQL多条件查询出错
- 要打开A窗体必须关闭B窗体 怎么设置
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 急!!将Access数据库中读取数据显示到web页中(C#)
- WebService查询返回的类型?
- 新手问题,求实现这个需求
- 清空数据库中表,但保留表结构,达人求解哈!!!!
- 麻烦各位大虾给一个思路,解决的话一定重谢了。
- 关于Enumerator<T>的实现,有代码,有图,高手来指点下,一定要给个答案, 不知道这是什么C#鸟语法
- 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;就可以正常退出了。