我尝试在.NET中创建一个异步连接到Linux服务器的客户端。我在C#中创建的套接字上使用BeginConnect方法,我打算将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);