Socket有些时候接收不到消息,紧急求救中
一个C/S模式的socket应用,服务器端采用c#编写。当客户端调用的时候,服务器端偶尔会获取不到客户端发送的信息,并且是再也收不到该客户端发送的信息,直到这个客户端重新绑定一个新socket来连接。这个问题在一台客户端或者多台客户端同时保持连接时都会出现。
关键代码如下:
IPEndPoint localEndPoint = new IPEndPoint(ipAddress,Convert.ToInt32(port_));
Socket listener = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
listener.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,50);
listener.Bind(localEndPoint);
listener.Listen(400);
Socket s = listener.Accept();
while(s!=null)
{
MsgOperate o=new MsgOperate(this);
o.ClientSocket=s;
Thread clientservice = new Thread(new ThreadStart(o.Poll));
clientservice.Start();
s=listener.Accept();
}
}
catch(Exception ex)
{
//错误抛出(此处没有抛出过错误)
}
public class MsgOperate
{
public void Poll(){
while(true)
{
if(clientsocket.Poll(-1,SelectMode.SelectRead))
{
//如果引发消息监听的socket已关闭,则退出循环
int k = ServiceClient();
if (k == 0)
break;
}
}
}
public int ServiceClient()
{
while(true)
{
try
{
if(socket.Available==0)
{ returnvalue=0;
break;
}
else
{returnvalue=1;
//做消息处理
}
return returnvalue;
}
catch(Exception e)
{
return 0;
}
}
}