问题描述
我编写了一个数据交换席位(类似于聊天室的服务器)程序,与1-2个用户进行数据交换时没有问题,但是超过2个用户同时进行数据交换,程序必定马上死机,我想请问应该怎么解决?我用的是TCP协议,网络通信使用的是Socket通信,具体程如下:privatevoidstart(){try{CheckForIllegalCrossThreadCalls=false;if(ipstring!=null){endpoint=newIPEndPoint(IPAddress.Parse(ip),80);listener=newTcpListener(endpoint);listener.Start();{thread=newThread(newThreadStart(this.startsocketlisten));thread.Start();}}}catch(Exceptione){MessageBox.Show(e.Message.ToString());}}privatevoidstartsocketlisten(){boolacceptenum=true;while(acceptenum==true){try{if(listener.Pending()){Socketsocket=listener.AcceptSocket();Threadthread1=newThread(newThreadStart(xianshi));thread1.Start();}}catch{}}}publicvoidxianshi(){//数据解析}
解决方案
解决方案二:
不懂,帮顶
解决方案三:
新手......
解决方案四:
难道死锁???不懂,胡说
解决方案五:
感觉很乱。。。boolacceptenum=true;是个局部变量啥时停止?不过看你thread应该是个类成员变量。Socketsocket=listener.AcceptSocket();Threadthread1=newThread(newThreadStart(xianshi));thread1.Start();你这个xianshi函数怎么跟新建立起来的socket连接关联上的?
解决方案六:
能知道是那里死了吗listener.AcceptSocket()这里你是不是写了在UI线程上面?
解决方案七:
能知道是那么死了吗?listener.AcceptSocket()这句是不是写了在UI线程上面
解决方案八:
能知道是那么死了吗?listener.AcceptSocket()这句是不是写了在UI线程上面
解决方案九:
privatevoidstartsocketlisten(){boolacceptenum=true;while(acceptenum==true){try{if(listener.Pending()){Socketsocket=listener.AcceptSocket();Threadthread1=newThread(newThreadStart(xianshi));thread1.Start();}}catch{}}}boolacceptenum=true;跟while语句,不死机才怪
解决方案十:
privatevoidstartsocketlisten(){boolacceptenum=true;while(acceptenum==true){try{if(listener.Pending()){Socketsocket=listener.AcceptSocket();Threadthread1=newThread(newThreadStart(xianshi));thread1.Start();}}catch{}}}boolacceptenum=true;跟while语句,不死机才怪
解决方案十一:
privatevoidstartsocketlisten(){boolacceptenum=true;while(acceptenum==true){try{if(listener.Pending()){Socketsocket=listener.AcceptSocket();Threadthread1=newThread(newThreadStart(xianshi));thread1.Start();}}catch{}}}boolacceptenum=true;跟while语句,不死机才怪
解决方案十二:
privatevoidstartsocketlisten(){boolacceptenum=true;while(acceptenum==true)boolacceptenum=true;跟while语句,不死机才怪
解决方案十三:
privatevoidstartsocketlisten(){boolacceptenum=true;while(acceptenum==true)boolacceptenum=true;跟while语句,不死机才怪
解决方案十四:
privatevoidstartsocketlisten(){boolacceptenum=true;while(acceptenum==true)boolacceptenum=true;跟while语句,不死机才怪
解决方案十五:
能知道是那么死了吗?listener.AcceptSocket()这句是不是写了在UI线程上面
解决方案:
uo
解决方案:
该回复于2008-03-14 09:09:43被版主删除
解决方案:
该回复于2008-03-14 09:09:43被版主删除
解决方案:
写聊天室的程序,肯定要用到多线程,至于如何编写,我也不是太内行?以前做过P2P聊天软件,你死机,就是没有用多线程,在VS2005下调试多线程,我的解决办法是Console.WriteLine()输出
解决方案:
你用的是socket同步调用,用到了多线程,但是对接受近来的socket没有进行处理.如果每次socket调用时间都不长,是短连接,可以用同步socket+多线程或socket+队列+多线程,但如果是长连接,建议用异步socket,这样效率比较高!
解决方案:
好资料,怎么获得?
解决方案:
publicvoidxianshi(){//数据解析}问题是你的数据解析代码没有写好!需要用lock(object){}来处理或者用monitor方法来实现数据排队解析
解决方案:
该回复于2016-02-28 23:42:43被版主删除