Einfaches Client-Server Programm (verbindungslos)

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
In folgendem Programm soll ein Client über einen Socket ein Datagramm, sprich eine anfrage an den Server schicken und als Antort ein Zitat, also einen String bekommen.

Da ich mich grade erst in Netzwerkprogrammierung mit Java einarbeite hatte ich versucht dem Tutorial "QuoteServerThread" unter java.sun...probiert aber komme irgendwie nicht mehr weiter.

Ist auch das erste mal dass ich 2 Klassen, sprich erst den Server, dann natürlich erst den anfragenden Client "anschalte"....wäre ja nicht das Problem, nur dass er mir mit Eclipse(die Programmierumgebung die ich nutze) nun komischerweise, nur eine der beiden main()-Methoden, die vom Server zum starten angeboten wird... :(

Hier die 3 Klassen...und der Text-File mit den "Zitaten"(Strings) die ausgegeben werden sollen:

Code:
import java.io.*;

public class QuoteServer 
{
    public static void main(String[] args) throws IOException 
    {
        new QuoteServerThread().start();
    }
}

#############################################

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Date;

public class QuoteServerThread extends Thread
{
	private DatagramSocket socket;
	private BufferedReader in;

	public QuoteServerThread() throws IOException
	{
		this.setName("QuoteServer");
	    //this("QuoteServer");
	}
	
	public QuoteServerThread(String name) throws IOException 
	{
	    super(name);
	    socket=new DatagramSocket(4445);

	    try 
	    {
	        in=new BufferedReader(new FileReader("one-liners.txt"));
	    } 
	    
	    catch (FileNotFoundException e)
	    {
	        System.err.println("Datei konnte nicht geöffnet werden"+"Zeit:");
	    }
	}  
	
	public void run()
	{
		while (true)
		//while (moreQuotes==true)
		{
			byte[] buf=new byte[256];
			DatagramPacket packet=new DatagramPacket(buf, buf.length);
		
			try 
			{
				socket.receive(packet);
			} 
		
			catch (IOException e) 
			{
				e.printStackTrace();
			}
			/**
			 * Jetzt wird die Antwort konstruiert:
			 */
			String dString=null;
			if (in==null)
			{
				dString=new Date().toString();
			}
		
			else
			{
				//dString=getNextQuote();
				buf=dString.getBytes();
			}
			/**
			 * Jetzt wird die konstruierte Antwort über 
			 * den DatagramSocket an den Client geschickt:
			 */
			InetAddress address=packet.getAddress();
			int port=packet.getPort();
			packet=new DatagramPacket(buf, buf.length, address, port);
			try 
			{
				socket.send(packet);
			} 
			catch (IOException e) 
			{
				e.printStackTrace();
				System.out.println("socket.send ist fehlgeschlagen!");
			}
			socket.close();
		}
	}
}
###########################################################

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class QuoteClient
{
	public static void main (String[] args,int port,InetAddress address,DatagramSocket socket,
							 DatagramPacket packet,byte[] sendBuf)
	{
		if (args.length!=1) 
		{
		     System.out.println("Für: Client<hostname>");
		     return;
		}
		/**
		 * Hier sendet die QuoteClient-Anwendung 
		 * eine Anfrage an den Server:
		 */
		byte[] buf=new byte[256];
		
		try 
		{
			DatagramSocket ds=new DatagramSocket();
			InetAddress ia=InetAddress.getByName(args[0]);
			DatagramPacket dp=new DatagramPacket(buf,buf.length,ia,4445);
			ds.send(dp);
		} 
		catch (SocketException e) 
		{
			e.printStackTrace();
			System.out.println("socket.send hat versagt!");
		}
		catch (UnknownHostException e) 
		{
			e.printStackTrace();
			System.out.println("Internet-Addresse???");
		}
		catch (IOException e) 
		{
			e.printStackTrace();
		}
		/**
		 * Nachdem der Client eine Nachricht vom 
		 * Server erhalten hat zeigt er diese an:
		 */
		packet=new DatagramPacket(buf,buf.length);
		try 
		{
			socket.receive(packet);
		} 
		catch (IOException e) 
		{
			e.printStackTrace();
		}
		String received=new String(packet.getData(),0,packet.getLength());
		System.out.println("Zitat des Moments:"+received);
	}
}

##################---one-liners.txt---#####################################

Life is wonderful. Without it we'd all be dead.
Daddy, why doesn't this magnet pick up this floppy disk?
Give me ambiguity or give me something else.
I.R.S.: We've got what it takes to take what you've got!
We are born naked, wet and hungry. Then things get worse.
Make it idiot proof and someone will make a better idiot.
He who laughs last thinks slowest!
 

Ullenboom

Bekanntes Mitglied
Guten Morgen Gast,

die JVM -- und somit auch Eclipse -- sucht ausschließlich nach einer Funktion mit der Signatur

public static void main( String[] args )

(oder etwas moderner: String... args))

Und bei dir sieht das etwas komplizierter aus.

Grüße

Christian
 
G

Guest

Gast
Habe mich darüber auch schon etwas gewundert, da ich noch nie so viele Argumente als Parameter in der main()-Methode hatte...aber bin halt einfach nur dem Tutorial gefolgt...scheine da wohl was falsch verstanden zu haben...aber das war ja auch auf Englisch... :cry:

Habe das ganze jetzt nochmal umgeändert...der Server scheint nun zu funktionieren...alllerdings gibt mir der Client nur seine IP (stimmt mit der unter "ipconfig" im DOS-Modus überein) und meinen Hostnamen an... :(

Starte hierbei einfach aus Eclipse raus zuerst den Server und dann den Client...

Warum der Client mir kein Zitat anzeigt, was er vom Server holen soll weiß ich leider immer noch nicht... :(

Code:
import java.io.*;
import java.net.*;

public class QuoteClient
{
	public static void main(String[] args) throws IOException
	{
		//IP Addresse holen:
		InetAddress addr=InetAddress.getLocalHost();
        String hostAddress=addr.getHostAddress();
        System.out.println("Host-Addresse: "+hostAddress);
        
        //Hostname holen:
        String hostname=addr.getHostName();
        
		if(args.length!=1)
		{
			System.out.println("Für Client: "+hostname);
			return;
		}

		//Ein Datagramsocket erstellen:
		DatagramSocket socket=new DatagramSocket();

		//Senden der Anfrage:
		byte[] buf=new byte[256];
		InetAddress address=InetAddress.getByName(hostAddress);
		
		DatagramPacket packet=new DatagramPacket(buf,buf.length,address,4445);
		socket.send(packet);

		//Erhalten der Antwort:
		packet=new DatagramPacket(buf, buf.length);
		socket.receive(packet);

		//Anzeigen der Antwort:
		String antwortZitat=new String(packet.getData(), 0, packet.getLength());
		System.out.println("Zitat: "+antwortZitat);

		socket.close();
	}
}
#######################################################
import java.io.*;
import java.net.*;
import java.util.*;
/**
 * Der QuoteSever soll einem Client auf Anfrage ein Zitat aus 
 * einer Liste senden und bei einer Exception nur das Date:
 */
public class QuoteServerThread extends Thread
{
	DatagramSocket socket=null;
	BufferedReader zitate=null;
	boolean mehrZitate=true;

	/**
	 * Wird ein leerer Konstruktor aufgerufen, wird 
	 * dem Thread automatisch ein Name zugewiesen:
	 */
	public QuoteServerThread() throws IOException
	{
		this("QuoteServerThread");
	}

	public QuoteServerThread(String name) throws IOException
	{
		super(name);//Der Superklasse(dem Thread) wird ein Name gegeben.
		
		//Der QuoteServerThread stellt einen Sockel auf Port 4445 bereit:
		socket=new DatagramSocket(4445); 

		
		//Öffnen der Zitatedatei:
		try
		{
			zitate=new BufferedReader(new FileReader("one-liners.txt"));
		} 
		catch(FileNotFoundException e)
		{
			System.err.println("Fehler beim öffnen der Zitatdatei! Zeit:");
		}
	}

	public void run()
	{
		while(mehrZitate)
		{
			try
			{
				byte[] buf=new byte[256];//Leeres Array für die zu empfangenden Daten.

				/**
				 * Empfangen der Anfrage:
				 * (Erstellen eines leeren Packets das dann mit den 
				 *  empfangenen Daten gefüllt werden kann:)
				 */
				DatagramPacket packet=new DatagramPacket(buf, buf.length);
				socket.receive(packet);

				//Erstellen der Antwort:
				String anwortZitat=null;
				if(zitate==null)
				{
					//Läuft was schief, wird nur das Date als Antwort gesendet:
					anwortZitat=new Date().toString();
				}
					//Andernfalls ein Zitat geholt:
					else
					{
						anwortZitat=getZitat();
						buf=anwortZitat.getBytes();
					}
				/**
				 * Senden der Antwort zum Client mit der 
				 * IP-Addresse "address" und dem Port "port":
				 */
				InetAddress zielIP=packet.getAddress();
				int zielPort=packet.getPort();
				packet=new DatagramPacket(buf, buf.length, zielIP, zielPort);
				socket.send(packet);
				} 
			catch(IOException e)
			{
				e.printStackTrace();
				mehrZitate=false;
			}
		}
		socket.close();
	}
	
	public String getZitat()
	{
		String zitat=null;
		try
		{
			if((zitat=zitate.readLine())==null)
			{
				zitate.close();
				mehrZitate=false;
				zitat="Keine Zitate mehr! Auf Wiedersehen!";
			}
		} 
		catch(IOException e)
		{
			zitat="IOException beim Server aufgetreten!";
		}
		return zitat;
	}
}
#############################################################
import java.io.*;

public class QuoteServer
{
	public static void main(String[] args) throws IOException
	{
		new QuoteServerThread().start();
	}
}

Der .txt-File mit den Zitaten bleibt der selbe...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
V einfaches hin und her von Text über Server Netzwerkprogrammierung 2
M Einfaches REST Webservice Beispiel Netzwerkprogrammierung 5
F Einfaches Gateway für Log-Files Netzwerkprogrammierung 1
E einfaches Problem: Session-Handling bei Servlets Netzwerkprogrammierung 5
T RMI Suche seeeeehr einfaches RMI-Tutorial Netzwerkprogrammierung 5
J RMI Einfaches Hello World mit Java6 + RMI, aber ClassNotFoundException Netzwerkprogrammierung 6
E Einfaches Problem mit Servlets Netzwerkprogrammierung 5
L einfaches Programm zum herunterladen von Bildern Netzwerkprogrammierung 2
I Performanteste Kommunikationsmethode zwischen Client u. Server Netzwerkprogrammierung 4
L Socket Automatische Zuweisung von Server und Client Rolle Netzwerkprogrammierung 12
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
B Axis2 Webservice mit Client Zertifikat Authentifizierung Netzwerkprogrammierung 3
Yonnig Threads mit Client/Server und GUI (laufend bis button-click) Netzwerkprogrammierung 9
T Jetty mit Client-Zertifikat nur bei spezifischer URL Netzwerkprogrammierung 1
J Einlesen von Servernachrichten von TCP-Client Netzwerkprogrammierung 17
J Client-Server und SOAP Netzwerkprogrammierung 23
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
D Server - Client Informationsaustausch, Möglichkeiten Netzwerkprogrammierung 3
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
T Client zu Client Kommunikation Netzwerkprogrammierung 2
D Slf4j - Logging - Client-Server Architektur Netzwerkprogrammierung 3
J client server mit nur einem PC Netzwerkprogrammierung 33
M Socket Nachricht von TCP-Client an Server schicken Netzwerkprogrammierung 12
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
ruutaiokwu ständig "sender address rejected: improper use of smtp" bei smtp-client Netzwerkprogrammierung 4
J HTTP [Java 9] Neuer HTTP Client - Tutorial Netzwerkprogrammierung 3
A Chatserver/-client - Code stoppt bei readUTF() Netzwerkprogrammierung 7
I Socket Das erste Server-Client Programm Netzwerkprogrammierung 16
L Zugriffprobleme Client - Webservice AspenTechnology Netzwerkprogrammierung 0
A Client Client Übertragung Netzwerkprogrammierung 12
M Socket Server antwortet dem Client nicht Netzwerkprogrammierung 6
K Socket Netty Client wirft Fehler! Netzwerkprogrammierung 3
I Client/Server Kommunikation bei einem Spiel Netzwerkprogrammierung 4
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
C Mini Client-Server-Anwendung funktioniert nicht Netzwerkprogrammierung 8
U Client Soap Verbindung wieder schließen Netzwerkprogrammierung 0
U Socket Client mit hash authentifizieren Netzwerkprogrammierung 3
F HTTP HTTP Rest Client mit TLS1.2 und selbst signiertem Zertifikat Netzwerkprogrammierung 2
P Server als Client nutzen Netzwerkprogrammierung 8
D Socket Run Args Client/Server Socket Netzwerkprogrammierung 1
Cromewell Socket Multithreaded Server und Client Netzwerkprogrammierung 1
Y Client/Server/DB communication Netzwerkprogrammierung 3
JavaWolf165 Socket mit .writeUtf etwas vom Client zum Server schicken Netzwerkprogrammierung 13
J Client - Serversocket Netzwerkprogrammierung 1
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
brainless Client Server Kommunikation verschlüsseln Netzwerkprogrammierung 13
gamebreiti Socket Server / Client Anwendung Manipulation von Objekten durch Server Netzwerkprogrammierung 9
T Socket Server/Client Kommunikation Netzwerkprogrammierung 8
N Fragen zu Sockets Client Netzwerkprogrammierung 3
F Extasys TCp Client extends Funktion Netzwerkprogrammierung 0
F Server Client Anwendung mit UDP Netzwerkprogrammierung 2
O Client zwischen XML und JSON auswählen lassen Netzwerkprogrammierung 2
A RMI Wo treten Exceptions bei RMI Aufrufen auf? Auf Client oder auf Server? Netzwerkprogrammierung 3
A ByteBuffer - Client/Server Netzwerkprogrammierung 9
A Socket Wie ein einfacher Multithreads Service mit Telnet als Client mit Observable/Observer gelöst.... Netzwerkprogrammierung 0
K C# Server - Android Client Netzwerkprogrammierung 0
T Application Client NullPointerExc Netzwerkprogrammierung 7
V TCP Client funktioniert auf Emulator aber nicht auf Smartphone Netzwerkprogrammierung 5
H Machbarkeitsfrage: TCP/IP Client (z.B. Netty) für Java Web Applcation Netzwerkprogrammierung 1
P MIME-TYPE Erklaerung, Kommunikation zwischen Client und Server Netzwerkprogrammierung 3
H HTTP REST Jersey - PUT-Beispiel von Client senden Netzwerkprogrammierung 0
J Sichere Kommunikation bei Server Client Netzwerkprogrammierung 3
T Frage zu Client-Server Applikation Netzwerkprogrammierung 2
H Socket Client/Server Socket Programmieren Netzwerkprogrammierung 1
M Theoretische Frage zu Server - Client Netzwerkprogrammierung 2
P HTTP Server / Client Netzwerkprogrammierung 1
N FTP FTP Client invalid IPv6 address (Apache Commons Net API) Netzwerkprogrammierung 6
F TCP Client, verbindung aufrecht halten Netzwerkprogrammierung 0
X RMI: Woher kennt der Client das Schnittstellen-Interface? Netzwerkprogrammierung 2
E Thematik Client server Netzwerkprogrammierung 2
D UDP Client empfängt nichts Netzwerkprogrammierung 2
D Client/Server per Crossover Lan Kabel Netzwerkprogrammierung 1
S Client Server Connection Netzwerkprogrammierung 4
V erste Client - Server Anwendung, paar Fragen wie Socketverbindung checken usw. Netzwerkprogrammierung 4
S Client Anwendung mit zentraler SQL-Datenbank Netzwerkprogrammierung 3
N Client Identifikation eines Servers Netzwerkprogrammierung 1
S Sichere Server/Client Architektur Netzwerkprogrammierung 1
D Chat Server/mehre Client Netzwerkprogrammierung 9
I Server+Client Netzwerkprogrammierung 3
N Client am Server abmelden Netzwerkprogrammierung 0
F Server/Client Probleme Netzwerkprogrammierung 3
D SSH Client Netzwerkprogrammierung 7
U Socket Instant Messanger (Server Linux, Client Windows) Netzwerkprogrammierung 1
B TCP Client Android Netzwerkprogrammierung 3
Athena Grundsatzfragen zu Client-Server-Architektur / Matchmaking Netzwerkprogrammierung 1
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
F Client Server DB Netzwerkprogrammierung 0
A Verständnisfrage Multi-Threaded Client/Server Netzwerkprogrammierung 5
F Tipps zum Thema Server/Client vie SOAP Netzwerkprogrammierung 0
OnDemand Ist Client noch angemeldet? Netzwerkprogrammierung 7
F Socket Java - Server/Client simple Netzwerkprogrammierung 1
D Socket UDP Client reagiert nicht auf spontane Meldungen Netzwerkprogrammierung 5
R Zeitliche Syncronisation Server - Client Netzwerkprogrammierung 0
S Server-Client: Image senden Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben