Я пытался сделать клиент в .NET, который асинхронно подключается к серверу Linux.Я использую метод BeginConnect для сокетов, которые я создал в C #, и я намерен ждать SYN_ACK от сервера до соответствующего пакета SYN, который получил сервер.На самом деле на сервере нет открытого порта или даже прослушивателя, потому что я использую сниффер для захвата SYN-пакетов от клиента.Я делаю свой собственный пакет SYN_ACK, отправляю его снова на IP-адрес клиента и успешно передаю его клиентскому интерфейсу.Но проблема в том, что метод BeginConnect не получил SYN_ACK и сказал, что время подключения сокета истекло.Вот мой фрагмент кода:
static void ConnectCallback(IAsyncResult ar)
{
try
{
// Retrieve the socket from the state object.
Socket client = (Socket) ar.AsyncState;
// Complete the connection.
client.EndConnect(ar);
Console.WriteLine("Socket connected to {0}",
client.RemoteEndPoint.ToString());
// Signal that the connection has been made.
connectDone.Set();
}
catch (Exception e)
{
//Console.WriteLine(e.ToString());
}
}
...
Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
tcpClient.BeginConnect("1.2.3.4", intPort[0], new AsyncCallback(ConnectCallback), tcpClient);