+ -
当前位置:首页 → 问答吧 → 程序运行过程中死机的解决方法?

程序运行过程中死机的解决方法?

时间:2008-03-13

来源:互联网

我编写了一个数据交换席位(类似于聊天室的服务器)程序,与1-2个用户进行数据交换时没有问题,但是超过2个用户同时进行数据交换,程序必定马上死机,我想请问应该怎么解决?
我用的是TCP协议,网络通信使用的是Socket通信,具体程如下:
private void start()
{
 try
  {
  CheckForIllegalCrossThreadCalls = false;
  if (ipstring != null)
  {
  endpoint = new IPEndPoint(IPAddress.Parse(ip), 80);
  listener = new TcpListener(endpoint);
  listener.Start();
  {
  thread = new Thread(new ThreadStart(this.startsocketlisten));
  thread.Start();
  }
  }
  }
  catch (Exception e)
  {
  MessageBox.Show(e.Message.ToString());
  }
}

 private void startsocketlisten()
  {
  bool acceptenum = true;
  while (acceptenum==true)
  {
  try
  {

  if (listener.Pending())
  {
  Socket socket = listener.AcceptSocket();
  Thread thread1 = new Thread(new ThreadStart(xianshi));
  thread1.Start();
   
  }
   
  }
  catch { }
  }

  }

 public void xianshi()
  {//数据解析}

作者: ff19191919   发布时间: 2008-03-13

不懂,帮顶

作者: rangeon   发布时间: 2008-03-13

新手......

作者: dweng   发布时间: 2008-03-13

难道死锁???
不懂,胡说

作者: lanwilliam   发布时间: 2008-03-13

感觉很乱。。。

bool acceptenum = true; 是个局部变量 啥时停止?不过看你thread应该是个类成员变量。

Socket socket = listener.AcceptSocket();
Thread thread1 = new Thread(new ThreadStart(xianshi));
thread1.Start(); 

你这个xianshi函数 怎么跟新建立起来的socket连接关联上的?

作者: beyondtkl   发布时间: 2008-03-13

能知道是那里死了吗
listener.AcceptSocket()
这里你是不是写了在UI线程上面?

作者: Love_My   发布时间: 2008-03-13

能知道是那么死了吗?

listener.AcceptSocket()
这句是不是写了在UI线程上面

作者: Love_My   发布时间: 2008-03-13

能知道是那么死了吗?

listener.AcceptSocket()
这句是不是写了在UI线程上面

作者: Love_My   发布时间: 2008-03-13

private void startsocketlisten() 
  { 
  bool acceptenum = true; 
  while (acceptenum==true) 
  { 
  try 
  { 

  if (listener.Pending()) 
  { 
  Socket socket = listener.AcceptSocket(); 
  Thread thread1 = new Thread(new ThreadStart(xianshi)); 
  thread1.Start(); 
   
  } 
   
  } 
  catch { } 
  } 

  } 

bool acceptenum = true; 
跟while语句,不死机才怪

作者: Fibona   发布时间: 2008-03-13

private void startsocketlisten() 
  { 
  bool acceptenum = true; 
  while (acceptenum==true) 
  { 
  try 
  { 

  if (listener.Pending()) 
  { 
  Socket socket = listener.AcceptSocket(); 
  Thread thread1 = new Thread(new ThreadStart(xianshi)); 
  thread1.Start(); 
   
  } 
   
  } 
  catch { } 
  } 

  } 

bool acceptenum = true; 
跟while语句,不死机才怪

作者: Fibona   发布时间: 2008-03-13

private void startsocketlisten() 
  { 
  bool acceptenum = true; 
  while (acceptenum==true) 
  { 
  try 
  { 

  if (listener.Pending()) 
  { 
  Socket socket = listener.AcceptSocket(); 
  Thread thread1 = new Thread(new ThreadStart(xianshi)); 
  thread1.Start(); 
   
  } 
   
  } 
  catch { } 
  } 

  } 

bool acceptenum = true; 
跟while语句,不死机才怪

作者: Fibona   发布时间: 2008-03-13

private   void   startsocketlisten()  
                {  
                          bool   acceptenum   =   true;  
                      while   (acceptenum==true)  
                     

bool   acceptenum   =   true;  
跟while语句,不死机才怪

作者: Fibona   发布时间: 2008-03-13

private void startsocketlisten() 
  { 
  bool acceptenum = true; 
  while (acceptenum==true) 
   

bool acceptenum = true; 
跟while语句,不死机才怪

作者: Fibona   发布时间: 2008-03-13

private void startsocketlisten() 
  { 
  bool acceptenum = true; 
  while (acceptenum==true) 
   

bool acceptenum = true; 
跟while语句,不死机才怪

作者: Fibona   发布时间: 2008-03-13

能知道是那么死了吗?

listener.AcceptSocket()
这句是不是写了在UI线程上面

作者: Love_My   发布时间: 2008-03-13

uo

作者: haierxiao   发布时间: 2008-03-13

该回复于2008-03-14 09:09:43被版主删除

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
#17楼 得分:0回复于:2008-03-13 21:06:21

作者: kafeiputao   发布时间: 2008-03-13

写聊天室的程序,肯定要用到多线程,至于如何编写,我也不是太内行?
以前做过P2P聊天软件,你死机,就是没有用多线程,在VS 2005下调试多线程,我
的解决办法是Console.WriteLine()输出

作者: kafeiputao   发布时间: 2008-03-13

你用的是socket同步调用,用到了多线程,但是对接受近来的socket没有进行处理.
如果每次socket调用时间都不长,是短连接,可以用同步socket+多线程或socket+队列+多线程,但如果是长连接,建议用异步socket,这样效率比较高!

作者: pengjihong960   发布时间: 2008-03-13

好资料,怎么获得?

作者: liubingonline   发布时间: 2008-03-13

public void xianshi()
  {//数据解析}
问题是你的数据解析代码没有写好!需要用lock(object){}来处理或者用monitor方法来实现数据排队解析

作者: kafeiputao   发布时间: 2008-03-13