问题描述
服务器端接收客户端的socket请求,每连接一个新请求,就分配一个新线程,然后调用send()方法,向客户端发送一条数据。现在的问题是:服务器端可以接收并分发线程,客户端也能接收到send()的数据,但是每当send()数据的时候,服务器端就产生死锁(没有响应),CPU100%这是为什么啊?是不是sned()属于不安全线程调用?有什么办法解决啊?谢谢了。
解决方案
解决方案二:
staticobjectobjLock=newobject();在要对同一socket访问时加锁:lock(objLock){//对socket的操作}不要使用lock(this)的方式加锁,这样在多线程中是不行的。
解决方案三:
试下,不知道行不行.
解决方案四:
加上了Lock还是不行啊.
解决方案五:
把代码贴出来吧,有可能不是接收、发送的问题。
解决方案六:
privateintlistenport=2000;privateTcpListenerlistener;privateThreadprocessor;privateSocketclientsocket;privateThreadclientservice;publicForm1(){InitializeComponent();Thread.CurrentThread.IsBackground=true;processor=newThread(newThreadStart(startListening));processor.Start();}privatevoidstartListening(){IPAddressipAddress=Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];IPEndPointipLocalEndPoint=newIPEndPoint(ipAddress,listenport);listener=newTcpListener(ipLocalEndPoint);listener.Start();while(true){try{Sockets=listener.AcceptSocket();clientsocket=s;clientservice=newThread(newThreadStart(ServiceClient));clientservice.Start();}catch(Exceptione){Console.WriteLine(e.ToString());}}}privatevoidServiceClient(){Socketclient=clientsocket;boolkeepalive=true;while(keepalive){Byte[]buffer=newByte[1024];try{client.Receive(buffer);}catch(SocketException){}client.Send(buffer);}}
解决方案七:
上面的代码会产生死锁.是不是应该用BenginSend()啊?
解决方案八:
首先,线程的死锁是不会让CPU100%的。死锁是两个(或更多)线程互相等待互斥量,几乎不占用CPU。你的情况应该是两个Sokcet一直给对方不停的不停的发送数据。你加个Sleep()会解决。但最好用Sokcet类里的异步方式来处理连接,发送,接收.以begin或end开头.性能非常好。
解决方案九:
用poll测下再send要不就阻塞了