我目前正在開發一個應用程序服務器。我想使用AcceptAsync方法。我得到錯誤「對象引用未設置爲對象的實例。」當調用ReceiveAsync方法時。如果有任何提出這個問題,並得到解決辦法呢?C#ReceiveAsync錯誤
public class AppServer
{
public void Start()
{
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(new IPEndPoint(IPAddress.Any, 12345));
serverSocket.Listen(100);
SocketAsyncEventArgs e = new SocketAsyncEventArgs();
e.Completed += new EventHandler<SocketAsyncEventArgs>(e_Completed);
bool raiseEvent = serverSocket.AcceptAsync(e);
if (!raiseEvent)
AcceptCallback(e);
}
void e_Completed(object sender, SocketAsyncEventArgs e)
{
AcceptCallback(e);
}
private void AcceptCallback(SocketAsyncEventArgs e)
{
SocketAsyncEventArgs readEventArgs = new SocketAsyncEventArgs();
readEventArgs.Completed += new EventHandler<SocketAsyncEventArgs>(readEventArgs_Completed);
Socket clientSocket = e.AcceptSocket;
bool raiseEvent = clientSocket.ReceiveAsync(readEventArgs); // <-- Error goes here
if (!raiseEvent)
ReceiveCallback(readEventArgs);
}
void readEventArgs_Completed(object sender, SocketAsyncEventArgs e)
{
ReceiveCallback(e);
}
private void ReceiveCallback(SocketAsyncEventArgs e)
{
}
}
我假設你是否在該行上放置了一個斷點,那麼clientSocket(因此e.AcceptSocket)爲空? e.SocketError返回什麼? – Rich 2011-06-11 10:20:07
我能夠重現這個問題,'clientSocket'是* not *'null',我無法弄清楚。 – svick 2011-06-11 11:20:50