Hallo,
ich erstelle einen TcpListener mithilfe folgender Code-Zeile:
TcpListener tcpServer = new TcpListener(serverPort);
.. und bekomme folgende Warnung:
Warning 'System.Net.Sockets.TcpListener.TcpListener(int)' is obsolete: 'This method has been deprecated. Please use TcpListener(IPAddress localaddr, int port) instead.
Wenn ich jedoch den vorgeschlagenen Konstruktor verwenden soll, weiß ich nicht was localAddress darstellen soll. Wenn ich 127.0.0.1 einsetze, dann erkennt dieser TcpListener bei mir nurnoch Verbindugnen, die vom selben Rechner ausgehen. Alles von außen wird blockiert.
Was kann ich tun, um nicht mit der Warnung leben zu müssen?
Hallo Rapthor,
in der Doku zu dem Konstruktor, den du verwenden willst/sollst steht doch, was man an IpAdresse verwenden kann/soll:
IPAddress ipAddress = Dns.Resolve("localhost").AddressList[0];
Oder geht das nicht?
herbivore
IPAddress ipAddress = Dns.Resolve("localhost").AddressList[0];
Oder geht das nicht?
Hallo,
da wurde die Dokumentation wohl nicht gut genug gewartet, denn Dns.Resolve ist laut Beta 2 ebenfalls deprecated.
Man muss die Fehlermeldung allerdings nur noch eine Ebene weiter verfolgen und man gelangt zum Ziel.
public static IPAddress GetLocalIp() {
return Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];
}
// ...
TcpListener listener = new TcpListener(GetLocalIp(), port);
GetLocalIp liefert jetzt je nach dem ob man in einem Netzwerk ist, bzw.
im Internet die entsprechende IP und ansonsten eben die Loopback IP.
grüße
Vielleicht solltes du das statische Feld IPAddress.Any für so was verwenden?
Laut Doku steht dazu:
Provides an IP address indicating that the server should listen for client activity on all network interfaces. This field is read-only.
I am Jack's smirking revenge.
I am Jack's raging bile duct.
I am Jack's cold sweat.
I am Jack's complete lack of surprise.
I am Jack's broken heart.
I am Jack's wasted life.
Original von maxE
Vielleicht solltes du das statische Feld IPAddress.Any für so was verwenden?
Laut Doku steht dazu:
Provides an IP address indicating that the server should listen for client activity on all network interfaces. This field is read-only.
Das hört sich ganz gut an! Werde ich also zukünftig verwenden. Danke!
Die Sache, die Bernhard vorschlug geht auch mit einer kleinen Veränderung:
Dns.GetByName(Dns.GetHostName()).AddressList[0]
"GetByName" anstelle "GetHostEntry", denn "GetHostEntry" gibt's nicht (mehr).
"GetByName" anstelle "GetHostEntry", denn "GetHostEntry" gibt's nicht (mehr).
Kann ich nicht nachvollziehen, da ich mein Beispiel testweise kompiliert habe
und sowohl in der offline Dokumentation als auch der MSDN gefunden habe.
Dafür aber konnte ich Dns.GetByName nicht finden, eventuell meinst
du ja Dns.GetHostByName, welches aber ebenfalls deprecated ist.
grüße
Dns.GetHostEntry bietet er mir garnicht erst an, aber du hattest Recht, dass es "GetByHostName()" heißen muss. Hierbei meldet er mir jedoch keinen "deprecated".
Ich verwende VisualStudio 2005 Beta 2 mit .Net 2.0 Beta. Mag vielleicht daran liegen.
Gruß,
Rapthor
GetHostByName ist also sehr wohl deprecated.