Laden...

new TcpListener(serverPort) deprecated

Erstellt von Rapthor vor 18 Jahren Letzter Beitrag vor 18 Jahren 2.743 Views
R
Rapthor Themenstarter:in
151 Beiträge seit 2005
vor 18 Jahren
new TcpListener(serverPort) deprecated

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?

49.485 Beiträge seit 2005
vor 18 Jahren

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

B
119 Beiträge seit 2005
vor 18 Jahren

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

M
456 Beiträge seit 2004
vor 18 Jahren

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.

R
Rapthor Themenstarter:in
151 Beiträge seit 2005
vor 18 Jahren

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).

B
119 Beiträge seit 2005
vor 18 Jahren

"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.

Dns.GetHostEntry Method

Dafür aber konnte ich Dns.GetByName nicht finden, eventuell meinst
du ja Dns.GetHostByName, welches aber ebenfalls deprecated ist.

grüße

R
Rapthor Themenstarter:in
151 Beiträge seit 2005
vor 18 Jahren

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

B
119 Beiträge seit 2005
vor 18 Jahren

Dns.GetHostByName Method

GetHostByName ist also sehr wohl deprecated.