Код клиента ::
IDGSocketClient client = new IDGSocketClient();
client.Connect("127.0.0.1", 8888);
client.Send("dadsa" );
IDGSocketClient Class
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, по моему мнению.