应该是在监听端口的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、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();
}
不要太纠结底层,反正纠结完你也没能力去改,胡乱改反而会不如不改了
还是把Accept到底怎么用研究明白更有实际意义
那是客户端的connect和服务端的accept共同作用的结果而且绝对不是说所有代码都在一个方法里,后面用到了各种接口,异步回调,是很复杂的一个过程,但是你用的时候就只需要知道一个connect一个accept就行了