.NET SSH tunnel - объект типа «System.Net.Sockets.Socket» не может быть преобразован в объект типа «System.Net.Sockets.TcpListener» - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь использовать код chilversc и получаю сообщение об ошибке в этой строке

var listener = (TcpListener) typeof (ForwardedPortLocal).GetField ("_listener", BindingFlags.Instance | BindingFlags.NonPublic).GetValue (port);

В чем может быть ошибка?

1 Ответ

2 голосов
/ 20 июня 2019

Возможно, что Gist основан на более старой версии SSH.NET.

Глядя на исходный код , ожидается сообщение об ошибке. _listener - это Socket, а не TcpListener:

_listener = new Socket(ep.AddressFamily, SocketType.Stream, ProtocolType.Tcp) {NoDelay = true};

На самом деле, я думаю, что просто изменение состава с TcpListener на Socket решит вашу проблему, поскольку Socket также имеет свойство LocalEndPoint.

// Hack to allow dynamic local ports, ForwardedPortLocal should expose _listener.LocalEndpoint
var listener = (Socket)typeof (ForwardedPortLocal).GetField("_listener", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(port);
localPort = ((System.Net.IPEndPoint)listener.LocalEndPoint).Port;
...