zeromq / netmq

A 100% native C# implementation of ZeroMQ for .NET
Other
2.95k stars 744 forks source link

How to know which client is disconnected,怎么确定是哪一个客户端断开连接 #840

Closed zcteo closed 4 years ago

zcteo commented 4 years ago

Environment

NetMQ Version:    Latest of master
Operating System: window 10 1909
.NET Version:     framework4.0 && standard2.0 

A RouterSocket as server, and the clients are DealerSockets. Use a Monitor to listen the RouterSocket 's Disconnected event. When listened to the client disconnected, how to confirm which client is disconnected.

dxdjgl commented 4 years ago

@zcteo It seems to work, with the following code I get the ipaddress and port of the client. static void Main(string[] args) { using (var rep = new RouterSocket()) using (var req = new DealerSocket()) using (var monitor = new NetMQMonitor(rep, "inproc://rep.inproc", SocketEvents.Accepted | SocketEvents.Disconnected)) { monitor.Accepted += (s, a) => { Console.WriteLine("local accept " + a.Address); Console.WriteLine("accept " + a.Socket.RemoteEndPoint);

            };
            monitor.Disconnected+= (s, a) =>
            {
                Console.WriteLine("local disconnected " + a.Address);
                Console.WriteLine("disconnected " + a.Socket.RemoteEndPoint);
            };

            monitor.Timeout = TimeSpan.FromMilliseconds(100);

            var monitorTask = Task.Factory.StartNew(monitor.Start);

            Thread.Sleep(10);

            var port = rep.BindRandomPort("tcp://0.0.0.0");

            req.Connect("tcp://127.0.0.1:" + port);

            Thread.Sleep(50);
            req.Dispose();

            monitor.Stop();
        }
    }
dxdjgl commented 4 years ago

I Will close this issue, if problem still exist please reopen.

zcteo commented 3 years ago

@dxdjgl sometimes, e.Socket could throw an exception

screen