应该是在监听端口的SOCKET上完成的。因为:
1、Socket.Accept得到一个已建立的连接(以下是英文链接,注意created中的过去式)
2、根据Berkeley socket的定义:
3、根据试验(需要两台机器,以及WireShark等网络嗅听软件):static void Main()
{
    using(Socket listener = new Socket( AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp))
    {
        listener.Bind(new IPEndPoint(IPAddress.Any, 5678));
        listener.Listen(3);        listener.BeginAccept(OnAccepted, listener);
        Console.ReadLine();
    }
}
static void OnAccepted(IAsyncResult ir)
{
    Console.WriteLine("Check ip traffic now. 3-way handshake should have already happended");
    Thread.Sleep(5000);
            
    Socket talkingSocket = (ir.AsyncState as Socket).EndAccept(ir);
    Console.WriteLine("Got the connected socket from: {0}", talkingSocket.RemoteEndPoint);
    talkingSocket.Close();
}

解决方案 »

  1.   

    又不需要你自己去写三次握手的代码,你管它到底是哪一步呢,反正都封装好了直接调用就行了
    不要太纠结底层,反正纠结完你也没能力去改,胡乱改反而会不如不改了
    还是把Accept到底怎么用研究明白更有实际意义
      

  2.   

    还有,既然是通信,那是双方的事情,不是所有代码都在其中一方就能完成的
    那是客户端的connect和服务端的accept共同作用的结果而且绝对不是说所有代码都在一个方法里,后面用到了各种接口,异步回调,是很复杂的一个过程,但是你用的时候就只需要知道一个connect一个accept就行了
      

  3.   

    你听说的3次握手是.net帮你完成的,它的连接,发送消息都会进行这3次“握手”