Socket Immer offener Port?

  • Themenstarter Themenstarter 1596547532584
  • Beginndatum Beginndatum
1

1596547532584

Gast
Hi, meine Frage ist, ob es einen Port gibt, auf den immer auf jedem PC gelauscht wird, sodass man feststellen kann, ob ein PC online ist, indem man versucht, sich mit dem Socket zu verbinden??

Lg
 
Naja, ich möchte das ja nicht bei jedem machen, sondern nur bei leuten, die grade das wollen oO

Ich dachte sockets wären die einzige möglichkeit, weil das auch in php funktionieren muss... aber pingen scheint auch zu gehen...

Danke. lg
 
aber man muss keinen port angeben oO

pingen funktioniert bis jetzt noch nicht so stabil...
 
ICMP (das Protokoll, was für Pings benutzt wird) läuft direkt über IP, darum muss man sich weder um Sockets noch Ports kümmern.
So richtig Spaß macht das aber auch nicht; mir ist auch nach kurzem Googlen keine gute Möglichkeit über den Weg gelaufen, mit Java ICMP-Pakete zu versenden.
 
sock_raw wird von Java glaube ich nicht unterstützt, soweit ich weiß, also kann man auch keine icmp Packete verschicken.
Man könnte via Process "ping ip" ausführen und den Output abfangen, oder überlegen, welchen Port alle Clients offen haben könnten (z.B. echo - tcp 7) und versuchen sich zu dem zu verbinden.
 
Das stimmt. Mit Java gehen eigentlich nur TCP und UDP gut.

Die Variante mit dem Echo-Port ist wohl auch das, was [c]InetAddress#isReachable()[/c] macht. Habe das aber nicht weiter verifiziert.
 
Hi

Wenn Du einen Rechner anpingst, dann bekommt man nur eine Antwort durch das ICMP. Da Du nur herausfinden möchtest, ob ein Rechner erreichbar ist, kommst Du mit ping nicht weit. Es ist ein verbindungsloses Protokoll des OSI Layers 3 und somit nur eine Untermenge von OSI 4. Erst OSI 4 ermöglicht über das TCP/IP Protokoll eine Verbindung, wie sie hinreichend als Socket bekannt ist.

Zu Deiner Frage vom Anfang. Ja es gibt solche Ports, wenn sie definiert wurden. Ansonsten muß der Client eine Verbindung zum Server aufbauen. Der Server selbst kann auch Client sein und auf einem bestimmten Port lauschen.

Java:
	private ServerSocket serverSocket;
	private Socket clientSocket;

public sei_bereit () {
			Socket socks = serverSocket.accept();
			clientSocket = new Socket();
			clientSocket = socks;
			//do something
}

Ich keine Ahnung, wie Deine Logik aussehen soll. Deswegen ist das für mich hier stochern im Nebel. Was ist denn Dein Plan?

Viele Grüße,
Semo
 
Ich möchte nur prüfen, ob ein PC erreichbar ist... Ich stell einfach eine Verbindung auf einen Socket des PCs her, und guck ob es klappt.

Dafür brauch ich aber einen Port, auf den immer gelauscht wird, ohne das man dafür ein Programm starten muss...
 
Den gibt es nicht. So eine Sicherheit ist einfach nicht gegeben. Da bist Du mit einem Ping besser bedient. Der ist zwar auch nicht sicher, aber sicherer.
 
Diesen Port Socket was auch immer gibt es nicht. Warum habe ich geschrieben --> ICMP kann das nicht leisten. Wäre auch Unsinn.

Du könntest den Client auch dazu bringen, daß er auf einem bestimmten Socket lauscht. Dazu müßte dann ein jeder Rechner ein bißchen Java Code bereithalten. Hier hast Du einen Hinweis aus der Java API

ServerSocket

public ServerSocket(int port,
int backlog,
InetAddress bindAddr)
throws IOException
Create a server with the specified port, listen backlog, and local IP address to bind to. The bindAddr argument can be used on a multi-homed host for a ServerSocket that will only accept connect requests to one of its addresses. If bindAddr is null, it will default accepting connections on any/all local addresses. The port must be between 0 and 65535, inclusive.
If there is a security manager, this method calls its checkListen method with the port argument as its argument to ensure the operation is allowed. This could result in a SecurityException.

The backlog argument must be a positive value greater than 0. If the value passed if equal or less than 0, then the default value will be assumed.

Parameters:
port - the local TCP port
backlog - the listen backlog
bindAddr - the local InetAddress the server will bind to
Throws:
SecurityException - if a security manager exists and its checkListen method doesn't allow the operation.
IOException - if an I/O error occurs when opening the socket.
Since:
JDK1.1
See Also:
SocketOptions, SocketImpl, SecurityManager.checkListen(int)
 

Zurück
Oben