Socket服务器,第二个客户端发送信息,但服务端只会接收第一条信息,再发就不接收了
我写的异步Socket服务器的问题,只能按收第一个客户端发送过来的数据(第一个客户端收发正常),
第二个客户端发送信息,但服务端只会接收第一条信息,再发就不接收了,其它都正常。后面加入的客户也跟第二个一样
private void StartSocketListen()//开始监听连接,为了大神看代码少辛苦点,省了一些。
{
while (true)//开始监听连接,为了大神看代码少辛苦点,省了一些。
{
//开始准备接入新的连接,一旦有新连接尝试则调用回调函数AcceptCallback
server.BeginAccept(new AsyncCallback(AcceptCallback), server);
// Wait until a connection is made before continuing.
connectDone.WaitOne();
}
}
private void AcceptCallback(IAsyncResult iar)
{
string str = string.Empty;
// Get the socket that handles the client request.
//还原传入的原始套接字
Socket server = (Socket)iar.AsyncState;
//在原始套接字上调用EndAccept方法,返回新的套接字
Socket handler = server.EndAccept(iar);
StateObject state = new StateObject();
state.WorkSocket = handler;
IPEndPoint clientip = (IPEndPoint)handler.RemoteEndPoint;
socketClientFlag = true;
//一个客户端连接完成,释放connectDone阻塞,以便于服务器接受下一个接入请求
connectDone.Set();
while (true)
{
//我的问题就在这里
//下面这段接收数据,如果用递归调用就没问题(在ReceiveCallback最后一行BeginReceive)
//我这里是用一个循环,以为本接收数据指令发出,循环被阻塞(receiveDone.waiteOne),直到有数据发送过来,
// 阻塞打开(receiveDone.set),执行下一个循环接收新的数据。
//好象理论上行得通,而且第一个接进来的客户端与服务器通讯也正常,
//但第二个客户端发信息,服务器就只能接收到第一个,以后的就不接收。后面接进来的客户也跟第二个客户一样
handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
receiveDone.WaitOne();
}
}