为什么我的TCP服务端总是占用CPU100%???

yulinlover 2006-08-01 07:32:29
private void button1_Click(object sender, System.EventArgs e)
{
thrListen=new Thread(new ThreadStart(Listen));
thrListen.IsBackground=true;
thrListen.Start();
}

private void Listen()
{
try
{
IPHostEntry ipinfo=new IPHostEntry();
ipinfo=Dns.Resolve(Dns.GetHostName());
IPAddress ip=ipinfo.AddressList[0];
int port=Convert.ToInt16(GetConfigValue("PORT"),10);
IPEndPoint ep=new IPEndPoint(ip,port);

Socket s=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
s.Bind(ep);
s.Listen(500);
//s.Bind((EndPoint)ep);

while(true)
{
Socket sa=s.Accept();
client=sa;
thrClientService=new Thread(new ThreadStart(ClientService));
thrClientService.IsBackground=true;
thrClientService.Start();
}
}
catch(Exception ex)
{
throw new Exception(ex.Message);
}
}

private void ClientService()
{
while(true)
{
ReceiveData.......
}


}

以上是我的服务端结构,请行家分析下,我的问题到底出在哪里?我都郁闷死了,还有客户端和服务端有一方关闭连接(没有经过协商,一方是强行的),那么另一方怎么就自动检测到然后关闭自己的这个线程呢,要不然,有一方就会仍然在循环运行。?请高手赐教!
...全文
338 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yulinlover 2006-08-01
  • 打赏
  • 举报
回复
没有人能够说为什么嘛?
yulinlover 2006-08-01
  • 打赏
  • 举报
回复
To:codemoocow
你说的用Sleep,我也想过,不过我用的时候就找不到,Sleep这个方法,别的方法都有。怪异!
yulinlover 2006-08-01
  • 打赏
  • 举报
回复
但我认为这里的Accept应该是阻塞函数,也就是说,当没有客户端连接的时候,它这个Listen的线程应该是停止在这的,一直在等人连接,如果有连接它才继续向下运行的啊,也就是后面又开了个线程为客户服务的线程的!
codemoocow 2006-08-01
  • 打赏
  • 举报
回复
using System.Threading;

while (true)
{
Thread.Sleep(100);
}
zhgroup 2006-08-01
  • 打赏
  • 举报
回复
thrClientService=new Thread(new ThreadStart(ClientService));
一直在不断的创建新的线程,
建议使用异步传输处理.
yulinlover 2006-08-01
  • 打赏
  • 举报
回复
补充下:还有在我上面的这个结构中,我在操作线程的方法里找不到Sleep方法!!奇怪!

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧