为什么调用 Recevice 的时候 我的函数 ReceiveCallback 在执行的时候 只能执行 if (bytesRead > 0) 里面的 执行不了else 里面的
回调函数 里面的 再次 执行 client.BeginReceive函数 也进不去,就是继续读取似乎不行,加了断点也没有用private void Receive(Socket client)
{
// 构造容器state.
StateObject state = new StateObject();
state.workSocket = client;
// 从远程目标接收数据.
client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
// sendDone.WaitOne();
Thread.Sleep(200);
}
private void ReceiveCallback(IAsyncResult ar)
{
// 从输入参数异步state对象中获取state和socket对象
StateObject state = (StateObject)ar.AsyncState;
Socket client = state.workSocket;
//从远程设备读取数据
// int bytesRead = 0;
int bytesRead = client.EndReceive(ar);
if (bytesRead > 0)
{
state.sb.Append(Encoding.GetEncoding("GB2312").GetString(state.buffer, 0, bytesRead));
response = state.sb.ToString();
// 继续读取.
try
{
client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
}
catch (Exception e)
{
}
}
else //为什么执行不了这里面的语句语句
{
receiveDone.Set(); // 所有数据读取完毕.
if (state.sb.Length > 1)
{
response = state.sb.ToString();
}
// 所有数据读取完毕的指示信号.
}
}
回调函数 里面的 再次 执行 client.BeginReceive函数 也进不去,就是继续读取似乎不行,加了断点也没有用private void Receive(Socket client)
{
// 构造容器state.
StateObject state = new StateObject();
state.workSocket = client;
// 从远程目标接收数据.
client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
// sendDone.WaitOne();
Thread.Sleep(200);
}
private void ReceiveCallback(IAsyncResult ar)
{
// 从输入参数异步state对象中获取state和socket对象
StateObject state = (StateObject)ar.AsyncState;
Socket client = state.workSocket;
//从远程设备读取数据
// int bytesRead = 0;
int bytesRead = client.EndReceive(ar);
if (bytesRead > 0)
{
state.sb.Append(Encoding.GetEncoding("GB2312").GetString(state.buffer, 0, bytesRead));
response = state.sb.ToString();
// 继续读取.
try
{
client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
}
catch (Exception e)
{
}
}
else //为什么执行不了这里面的语句语句
{
receiveDone.Set(); // 所有数据读取完毕.
if (state.sb.Length > 1)
{
response = state.sb.ToString();
}
// 所有数据读取完毕的指示信号.
}
}
因为这句,如果没有收到信息,就会一直停在这个位置
执行到 try 里面的 client.BeginReceive 就不在进回调函数了