客户代码::
IDGSocketClient client = new IDGSocketClient();
client.Connect("127.0.0.1", 8888);
client.Send("dadsa" );
IDGSocketClient类
public void Connect(string ipAddress, int port)
{
clientSocket.Connect(ipAddress, port);
}
public void Send(string data, int i)
{
Console.Write("send called");
Socket socket = clientSocket.Client;
byte[] a = { 1, 2 };
socket.BeginSend(a, 0,1, 0, new AsyncCallback(SendCallback), null);
Console.Write("Send Returned");
}
public void SendCallback(IAsyncResult ar)
{
while (true) ;
}
服务器:
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 8888);
serverSocket = new TcpListener(ipEndPoint);
serverSocket.Start();
TcpClient client = serverSocket.AcceptTcpClient();
现在,我希望BeginSend立即返回或至少在一段时间后返回,但这里不是这种情况。
输出
send called
输出不应为
send calledSend Returned
重新措辞: BeginSend是一种方法,根据文档,应在新线程中调用回调函数,调用该线程的线程将不会被阻塞(除非手动完成)。 就我而言,即使回调具有无限循环,该循环也应在另一个线程中执行,而在我看来,名为beginSend的线程应执行下一个Console.Write语句。