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

ff19191919 2008-03-13 09:36:07
我编写了一个数据交换席位(类似于聊天室的服务器)程序,与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()
{//数据解析}
...全文
180 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
ucyhboy 2011-12-22
  • 打赏
  • 举报
回复
public void xianshi()
{//数据解析}
问题是你的数据解析代码没有写好!需要用lock(object){}来处理或者用monitor方法来实现数据排队解析
kafeiputao 2008-03-13
  • 打赏
  • 举报
回复
好资料,怎么获得?
liubingonline 2008-03-13
  • 打赏
  • 举报
回复
你用的是socket同步调用,用到了多线程,但是对接受近来的socket没有进行处理.
如果每次socket调用时间都不长,是短连接,可以用同步socket+多线程或socket+队列+多线程,但如果是长连接,建议用异步socket,这样效率比较高!
pengjihong960 2008-03-13
  • 打赏
  • 举报
回复
写聊天室的程序,肯定要用到多线程,至于如何编写,我也不是太内行?
以前做过P2P聊天软件,你死机,就是没有用多线程,在VS 2005下调试多线程,我
的解决办法是Console.WriteLine()输出
rangeon 2008-03-13
  • 打赏
  • 举报
回复
不懂,帮顶
haierxiao 2008-03-13
  • 打赏
  • 举报
回复
uo
Love_My 2008-03-13
  • 打赏
  • 举报
回复
能知道是那么死了吗?

listener.AcceptSocket()
这句是不是写了在UI线程上面
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
  • 打赏
  • 举报
回复
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语句,不死机才怪
Love_My 2008-03-13
  • 打赏
  • 举报
回复
能知道是那么死了吗?

listener.AcceptSocket()
这句是不是写了在UI线程上面
Love_My 2008-03-13
  • 打赏
  • 举报
回复
能知道是那么死了吗?

listener.AcceptSocket()
这句是不是写了在UI线程上面
Love_My 2008-03-13
  • 打赏
  • 举报
回复
能知道是那里死了吗
listener.AcceptSocket()
这里你是不是写了在UI线程上面?
beyondtkl 2008-03-13
  • 打赏
  • 举报
回复
感觉很乱。。。

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

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

你这个xianshi函数 怎么跟新建立起来的socket连接关联上的?
b哈利路亚d 2008-03-13
  • 打赏
  • 举报
回复
难道死锁???
不懂,胡说
dweng 2008-03-13
  • 打赏
  • 举报
回复
新手......

110,477

社区成员

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

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

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