ohne Port Freigabe.

Status
Nicht offen für weitere Antworten.

Titanpharao

Bekanntes Mitglied
Guten Abend,

sicher wurde die Frage schon oft im Forum gestellt, aber habe keine richtige Ideen nach was ich suchen kann.

Zwar habe ich die Frage, wie man sein Programm so gestalten kann, das man keine Port-Freigabe machen muss.
Ich stelle es mir blöd vor, wenn jeder der kurz den Server starten möchte erst die Ports freigeben muss. Bei UDP ist doch eigentlich jeder Server und Client, soweit ich das verstanden haben. Also müsten ach die Clienten Ports freigeben.
Ich meine bei Online-Spielen muss ich auch nichts freigeben. Nur wenn ich richtiger Server sein möchte. Aber ich glaube, auch bei meinem Test Chat Programm, müssen beide die Ports freigeben.

Wenn ich jetzt über den Port 80 gehe, oder die, welche standard sind dann bekomme ich doch auch sicher viel müll für mein Programm oder?

Hoffe meine Frage wurde verstanden :?
 

Kim Stebel

Bekanntes Mitglied
Ähhm ja vielleicht solltest du dir mal einen Artikel zum Thema NAT und Firewalls durchlesen. Ports müssen da jedenfalls immer freigegeben werden, wenn auf eine Verbindungsaufbau gewartet werden soll, aber nicht wenn der Rechner die Verbindung selbst herstellt.
 
T

tuxedo

Gast
Naja. Es gibt da noch den UPnP Trick. Azureus und Co. wenden den schon an. Sofern dein Router UPnP korrekt unterstützt, kann die Anwendung den "Serverport" mittels UPnP auch selbst freigeben. D.h. der User muss nix mehr konfigurieren. Die Anwendung macht das selbst.

Ich weiß nur nicht ob man den automatisch freizugebenden Port selbst definieren kann.

Google doch mal nach "Java UPnP"

- Alex
 

Titanpharao

Bekanntes Mitglied
Nein, ich möchte einfach ein Spiel bauen, was auf Client-Server bassiert.
Also viele kleine Clienten und ein Server, der alles managed. Aber ich möchte einfach nicht, das die leute, welche den Clienten benutzen Ports freigeben müssen. Weil noch ist es so in meinem Programm, irgendwie...
 
T

tuxedo

Gast
Man, wer hat denn eigentlich diesen "Unsinn" verbreitet, dass man, wenn man vom CLient aus eine Verbindung zu einem Server aufbauen will, dafür irgendwelche Portforwarding-Strategien aufm dem Client fahren muss? In Game-Foren aller Art wird ständig solcher "Schwachsinn" verbreitet. Geht irgendwas nicht schiebt man's sofort auf "Du hast vergessen den Port freizugeben"... Keine Ahung haben woran's wirklich liegt (bei windows usern oft der fall), und dann einfach mal was ins blaue hinein "empfehlen" (kommt dem "geht nicht? starte mal windows neu." gleich).

Ich stelle mal die behauptung auf, dass weniger als 5% der Leute eine so restriktive Firewall haben, bzw einen so restriktiven Router haben, der ausgehende Verbindungen "per default" verbietet und man dies nachträglich einrichten muss.

Vergiss den Mist mit "port freigeben" also gleich wieder. Ausgehende Verbindungen müssen (in der allerallerallermeisten Fällen) nicht "geforwardet" werden. Oder hast du etwa ein Portforwarindg für Port 80 dieser Webseite einrichten müssen? Nein? Siehst du. Geht doch.

Was anderes ist es am Server. Dieser bietet einen "Dienst" auf einem dafür vorgesehenen Port an. Sitzt der Server hinter einem Router hat das eingehende Paket ja keinen Schimmer, welche der wohlmöglich privaten IP-Adressen hinter dem Router jetzt zum passenden Server führt. HIER braucht man dann das Port-Forwarding. Da steht dann im Router sinngemäß "Wenn eine Anfrage für Port XYZ eingeht, dann leite ich die Daten an Rechner ABC hinter mir weiter".

Weitere Infos liefert google unter dem Begriff "Portforwarding".

- Alex
 

DamienX

Aktives Mitglied
In Alexs Post war eigentlich schon alles drin was du wissen musst.

Aber zu deiner Anmerkung zu UDP:

UDP ist ein Verbindungsloses Übertragungsprotokoll...
im großen und ganzen kannst du dir vorstellen dass du über einen Port einfach ohne
Rücksicht auf verluste Daten raushaust. Ob diese dann ankommen oder nicht
bzw. wie juckt UDP standardmäßig einfach nicht.

Das was du vermutlich meinstest (Client und Server gleichzeitig) nennt sich Peer to Peer!
Das sind direktverbindungen zwischen 2 Peers (Systemen)!

Hoffe ich hab die da nicht falsch verstanden.

Grüße... der andere Alex :wink:
 

Titanpharao

Bekanntes Mitglied
ich habe aber ein DSL-Modem, soweit ich weis, hat das keine interne Firewall. Denke eher, ich habe keinen richtigen Server geschrieben :(

Bin ganz neu im Netzwerkprogrammieren :### da hilft auch keine API :wink:

Vielleicht siehst du schon erste Anfänger Fehler. Wäre nett, wenn du mal drüberschauen könntest. Der Client ist in einer Oberfläche eingebuden.

Server
Code:
package chatclient;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.ArrayList;

public class Server {	
	DatagramSocket server;
	byte daten[]=new byte[1024];
	DatagramPacket packet=new DatagramPacket(daten,daten.length);;
	ArrayList<Chatter> chatter=new ArrayList<Chatter>();
	public Server() {
		try {
			server=new DatagramSocket(448);
			handlepacket();
		} catch (Exception e) {}
	}
	
	private void handlepacket(){
		boolean onlytext=false;
			while(true){
				try {	
				onlytext=false;
				packet.setData(new byte[1024]);
				server.receive(packet);//Server erhält ein Paket
				for(int i=0;i<chatter.size();++i){//Server schaut, ob der Benutzer in der Liste ist 
					if(chatter.get(i).getIp().equals(packet.getAddress())){
						sendmessagetoall(i);
						onlytext=true;
						break;					
					}
				}				
				if(onlytext==false){
					System.out.println(toreadString(packet.getData()));
					chatter.add(new Chatter(toreadString(packet.getData()),packet.getAddress()));
				}
				} catch (Exception e) {}
			}						
	}
	
	private void sendmessagetoall(int nr){		
		try {
			for(int i=0;i<chatter.size();++i){
				String tmp=toreadString(packet.getData());
				tmp=chatter.get(nr).getName()+":"+tmp;
				packet.setData(tmp.getBytes());				
				DatagramPacket sendpacket=new DatagramPacket(packet.getData(),packet.getData().length,chatter.get(i).getIp(),80);
				server.send(sendpacket);
			}
		} catch (Exception e) {
			System.out.println(e.getStackTrace());
		}
	}
	
	public String toreadString(byte[] tmp){
		String text="";
		for(int i=0;i<tmp.length;++i){
			if(tmp[i]!=0){
				char x=(char)tmp[i];
				text+=x;						
			}
		}
		return text;
	}
	
	public static void main(String[] args) {
		new Server();
	}
}

class Chatter{
	private String name;
	private InetAddress ip;
	public Chatter(String name, InetAddress ip) {
		this.name = name;
		this.ip = ip;
	}
	public String getName() {
		return name;
	}
	public InetAddress getIp() {
		return ip;
	}	
}

Client
Code:
package chatclient;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class Client {
	DatagramSocket client;
	//DatagramPacket sendpacket;
	DatagramPacket empfpacket;
	byte daten[]=new byte[1024];
	byte daten2[]=new byte[1024];
	InetAddress address;
	private Chatfenster f;
	public Client(String name,String ip,int port,final Chatfenster f) {
		this.f=f;
		try {	
			client= new DatagramSocket(80);
			address=InetAddress.getByName(ip);
			//sendpacket=new DatagramPacket(daten,daten.length,address,port);
			empfpacket=new DatagramPacket(daten2,daten2.length,address,port);
			sendtoserver(name);
			Empfangen empfangen=new Empfangen();
			empfangen.start();
		}
		catch (Exception e) {}
	}
	
	class Empfangen extends Thread {
		@Override
		public void run() {
			while(true){
				try {
					empfpacket.setData(new byte[1024]);
					client.receive(empfpacket);					
					String text="";
					for(int i=0;i<empfpacket.getData().length;++i){
						if(empfpacket.getData()[i]!=0){
							char tmp=(char)empfpacket.getData()[i];
							text+=tmp;
							
						}
					}						
					f.annehmen(text);
				} catch (Exception e) {}
			}
		}
	}
	
	public void sendtoserver(String text){
		DatagramPacket sendpacket=new DatagramPacket(daten,daten.length,address,448);
		sendpacket.setData(text.getBytes());
		//sendpacket.setData(text.getBytes());
		try {
			client.send(sendpacket);			
		} catch (Exception e) {}
	}
}

Dankeschön
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Server ohne Port Netzwerkprogrammierung 4
T TCP mit und ohne Threads Netzwerkprogrammierung 1
V Socket Audio Clip loopen ohne neuen Thread Netzwerkprogrammierung 2
L Socket Wie kann man in Java die Anzahl der Objekte in einem InputStream sehen ohne ihn durchgehen zu müssen Netzwerkprogrammierung 1
Q-bert Link zugang ohne login sperren. Netzwerkprogrammierung 1
L Socket Zwei Computer im gleichen Netwerk ohne Portforwarding ? Netzwerkprogrammierung 12
J HTTP Befehl via HTTP senden ohne Browser öffnen Netzwerkprogrammierung 3
B JSch Filetransfer ohne KnownHosts Datei? Netzwerkprogrammierung 0
D GZIP InputStream lesen ohne zu encoden Netzwerkprogrammierung 1
T UDP Pakete empfangen ohne Programm zu blockieren Netzwerkprogrammierung 3
D Zugriff auf Webinhalte ohne visuelles Öffnen der Website Netzwerkprogrammierung 2
T Anwendungseinstellungen ohne Datei übertragen? Netzwerkprogrammierung 8
B Socket BufferedImage senden "ohne speichern" Netzwerkprogrammierung 7
N (TCP) Verbindung ohne Portforwarding Netzwerkprogrammierung 12
B Socket BufferedReader.readLine() beenden ohne den Stream zu closen Netzwerkprogrammierung 7
D Mit wsimport erstellte Klassen ohne WSDL nutzen Netzwerkprogrammierung 4
T Datei downloaden ohne den Dateinamen zu kennen Netzwerkprogrammierung 2
D RMI Gui auf client updaten basierend auf den Property Änderung des Models auf dem Server ohne polling Netzwerkprogrammierung 12
B FTP Datei auslesen ohne einloggen möglich? Netzwerkprogrammierung 19
E RMI ohne Portforwarding? Netzwerkprogrammierung 2
M Ping mehrerer Ports aus int[] ohne for-Schleifendurchlauf Netzwerkprogrammierung 11
C Login ohne Erfolg Netzwerkprogrammierung 2
L einfacher server ohne threads Netzwerkprogrammierung 4
P RMI ohne Security Netzwerkprogrammierung 5
J Client ohne Server? Netzwerkprogrammierung 7
K Socket Daten lesen ohne Längenangabe Netzwerkprogrammierung 19
0 soap client ohne WSDL Netzwerkprogrammierung 3
J Connection Speed Test ohne Applet Netzwerkprogrammierung 5
E DatagramSocket rausfinden ob recive möglich ohne zu blocken Netzwerkprogrammierung 10
O Webservice ohne Eclipse laufen lassen Netzwerkprogrammierung 3
L RMI Programm beendet ohne Fehler sofort nach Start (Windows 2000) Netzwerkprogrammierung 7
C imap/java emails checken ohne runterzuladen? Netzwerkprogrammierung 3
P P2P ohne Portfreigabe Netzwerkprogrammierung 12
J Client-Client-Chat ohne Serverbeteiligung Netzwerkprogrammierung 2
G Connection zu MySQL ohne ODBC Netzwerkprogrammierung 8
G TCP Verbindung überprüfen OHNE daten zu verschicken Netzwerkprogrammierung 11
T select() ohne NIO - oder wie Worker-Thread sauber beenden? Netzwerkprogrammierung 9
Paule Connection Applet Servlet ohne Socket bzw RMI Netzwerkprogrammierung 2
L http kommunikation mit und ohne multipart Netzwerkprogrammierung 4
R RMI: Remote Object ohne Naming Service benutzen? Netzwerkprogrammierung 2
K RMI ohne Kommandozeileneingabe Netzwerkprogrammierung 9
M Ende des Streams ohne Schließen/Checksumme mitsenden Netzwerkprogrammierung 2
G SSL Verbindung ohne Zertifikat Netzwerkprogrammierung 9
D Timeouts ohne Ende bei SMTP und FTP Netzwerkprogrammierung 3
M Client-Kommunikation ohne Server Netzwerkprogrammierung 7
M schreiben auf geschlossenen Socket ohne Exception Netzwerkprogrammierung 6
A server mit 2 Ports : Mit und ohne SSL Chat system Netzwerkprogrammierung 10
K Applet - Servlet Kommunikation ohne Sockets Netzwerkprogrammierung 5
J Vom BufferedReader lesen -> hängt ohne Fehler,ohne Except Netzwerkprogrammierung 2
JavaDevOp Socket Status von UDP-Port prüfen (PortUnreachableException funktioniert nicht?) Netzwerkprogrammierung 32
FrankenDerStein Socket UDP Multithreading für ein Port Netzwerkprogrammierung 2
T multithreaded multiport socketListener beendet TCP-Port-Listening Netzwerkprogrammierung 16
C Proxy Server - Antwort auf welchem Port Netzwerkprogrammierung 1
precoc Port Listener Netzwerkprogrammierung 2
T Port forwarding Netzwerkprogrammierung 11
Rudolf Socket An welchen Port sendet ein Mailserver zu einem anderen Mailserver Netzwerkprogrammierung 8
C Socket Connection refused bei Internetverbindung - Welcher Port? Netzwerkprogrammierung 5
S Port abhören Netzwerkprogrammierung 11
M Gleicher Port für Senden und Empfangen ? Netzwerkprogrammierung 17
Dit_ UDP Port testen | Ping Google? Netzwerkprogrammierung 7
J Port lauschen Netzwerkprogrammierung 2
D Weiterer Thread auf Port 843 horcht Netzwerkprogrammierung 7
H Mysql port forwarding Netzwerkprogrammierung 5
Dit_ UDP Port bestimmen | Windows, MAC, Linux... Netzwerkprogrammierung 2
J UDP port packete lesen,wenn dieser besetzt ist Netzwerkprogrammierung 3
T Java Mail port ändern Netzwerkprogrammierung 4
1 Socket Immer offener Port? Netzwerkprogrammierung 11
R wie prüfe ich ob ein port frei is ? Netzwerkprogrammierung 7
S Port auf einer bestimmten IP-Adresse auslesen? Netzwerkprogrammierung 6
X Port scannen/schicken Netzwerkprogrammierung 4
W scan remote UDP port Netzwerkprogrammierung 6
M Socket Herausfinden ob server auf port läuft Netzwerkprogrammierung 8
F UDP Receive und Send am gleichen Port Netzwerkprogrammierung 3
G Port freigeben Netzwerkprogrammierung 3
P Sockets +Port Forwarding = Chaos Netzwerkprogrammierung 4
J GSM Modem an Serial Port ansteuern (AT commands) Netzwerkprogrammierung 2
Schandro Herausfinden ob hinter einem Port bereits ein ServerSocket steckt Netzwerkprogrammierung 2
ABstraCT Applet multipler port Zugriff möglich ? Netzwerkprogrammierung 5
ABstraCT Telnet port Zugriff problem (public IP) Netzwerkprogrammierung 12
K Problem mit Com-Port-Komunikation Netzwerkprogrammierung 57
G "Port already in use" RMI über SSL Netzwerkprogrammierung 9
S port lauschen Netzwerkprogrammierung 2
feuervogel Sockets - Lokalen Port aber nicht IP bestimmen Netzwerkprogrammierung 3
G port scanner Netzwerkprogrammierung 6
S Port mithören Netzwerkprogrammierung 9
P jakarta.HttpClient: Port bei GetMethod angeben Netzwerkprogrammierung 3
A port noch belegt Netzwerkprogrammierung 3
K Port 13 nur einmal abfragbar? Netzwerkprogrammierung 2
R Problem mit mehreren Anfragen auf demselben Port Netzwerkprogrammierung 2
TRunKX Ein Port mehrere Verbindungen? Netzwerkprogrammierung 7
H Port abhören Netzwerkprogrammierung 3
F freien Port finden Netzwerkprogrammierung 7
S GEHT DAS? - Nur eine Frage! (Printer Port direkt ansteuern?) Netzwerkprogrammierung 4
T Kann man jeden Port für Programm verwenden? Netzwerkprogrammierung 2
T PORT 80 überwachen Netzwerkprogrammierung 12
G an port lauschen Netzwerkprogrammierung 10
K nicht physikalische com port ansprechen ? Netzwerkprogrammierung 3
S SSLSocketFactory.createSocket(String hostname, int port),wo? Netzwerkprogrammierung 5
G Port belegt nach Server restart Netzwerkprogrammierung 5
R Port trotz aktiver Firewall nutzen ! Netzwerkprogrammierung 9

Ähnliche Java Themen


Oben