Hallo zusammen,
ich Rahmen eines Praktikums im Studium war die Aufgabe Objecte über einen Socket zu verschicken.Dies sollte mitteln eines multiClientServer geschehen. Das Verschicken der Objekte muss zwingend über einen ObjectOutputStream realisiert .Derzeitig werden nur String Objekte verschickt, zum Testen...
Unten befinden sich 3 Klassen: Server, ClientHandler, und der Client. Um leichter einen Einstieg zu finden, habe ich den Code eingefügt.
Ich starte also die Main Methode der Server Klassen und im Anschluss führe ich die Main des Client aus.
An der Stelle
System.out.println("bis hier und nicht weiter"); innerhalb des ClientHandler.class ist dann irgendwie Schluss. Dies wird noch ausgegeben.
Aber der Thread wird nicht gestartet, also glaube ich zumindestens, auf jeden Fall wird der print Befehl innerhalb des Construktors von CLientHandler nicht ausgegeben.
Ich habe die Dateien zudem in den Anhang gepackt.
Vielen Dank im voraus, ich bin überfrage
ich Rahmen eines Praktikums im Studium war die Aufgabe Objecte über einen Socket zu verschicken.Dies sollte mitteln eines multiClientServer geschehen. Das Verschicken der Objekte muss zwingend über einen ObjectOutputStream realisiert .Derzeitig werden nur String Objekte verschickt, zum Testen...
Unten befinden sich 3 Klassen: Server, ClientHandler, und der Client. Um leichter einen Einstieg zu finden, habe ich den Code eingefügt.
Ich starte also die Main Methode der Server Klassen und im Anschluss führe ich die Main des Client aus.
An der Stelle
System.out.println("bis hier und nicht weiter"); innerhalb des ClientHandler.class ist dann irgendwie Schluss. Dies wird noch ausgegeben.
Aber der Thread wird nicht gestartet, also glaube ich zumindestens, auf jeden Fall wird der print Befehl innerhalb des Construktors von CLientHandler nicht ausgegeben.
Ich habe die Dateien zudem in den Anhang gepackt.
Vielen Dank im voraus, ich bin überfrage
Java:
package tcp_final;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
//Java implementation of Server side
//It contains two classes : Server and ClientHandler
//Save file as Server.java
//Server class
public class Server
{
public static void main(String[] args) throws IOException
{
// server is listening on port 5056
ServerSocket ss = new ServerSocket(8080);
System.out.println("Server gestartet auf Socket: "+ ss.getLocalPort());
// running infinite loop for getting
// client request
while (true)
{
Socket s = null;
try
{
// socket object to receive incoming client requests
s = ss.accept();
System.out.println("bis hier und nicht weiter");
ObjectInputStream dis = new ObjectInputStream(s.getInputStream());
ObjectOutputStream dos = new ObjectOutputStream(s.getOutputStream());
System.out.println("Assigning new thread for this client");
Thread t = new ClientHandler(s, dis, dos);
t.start();
}
catch (Exception e){
s.close();
ss.close();
e.printStackTrace();
}
}
}
}
Java:
package tcp_final;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
//ClientHandler class
class ClientHandler extends Thread
{
final ObjectInputStream dis;
final ObjectOutputStream dos;
final Socket s;
// Constructor
public ClientHandler(Socket s, ObjectInputStream dis, ObjectOutputStream dos)
{
System.out.println("Run ClientHandler Constructor");
this.s = s;
this.dis = dis;
this.dos = dos;
}
@Override
public void run()
{
System.out.println("Thread Run Methode");
String received;
while (true)
{
try {
received = (String) dis.readObject();
System.out.println("Vom Server gesendet: "+ received);
if(received.equals("Exit"))
{
System.out.println("Client " + this.s + " sends exit...");
System.out.println("Closing this connection.");
this.s.close();
System.out.println("Connection closed");
break;
}
///send to server
dos.writeObject("Irgendeine Nachricht");
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try
{
// closing resources
this.dis.close();
this.dos.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
Java:
package tcp_final;
import java.io.*;
import java.net.*;
import java.util.Scanner;
//Client class
public class Client
{
public static void main(String[] args) throws IOException
{
try
{
Scanner scn = new Scanner(System.in);
// getting localhost ip
InetAddress ip = InetAddress.getByName("localhost");
Socket s = new Socket(ip, 8080);
ObjectInputStream dis = new ObjectInputStream(s.getInputStream());
ObjectOutputStream dos = new ObjectOutputStream(s.getOutputStream());
// the following loop performs the exchange of
// information between client and client handler
while (true)
{
System.out.println("Client While");
String tosend = "Nachricht an den Server";
dos.writeObject(tosend);
if(tosend.equals("Exit"))
{
s.close();
break;
}
/// Antwort from Server
String received = (String) dis.readObject();
System.out.println(received);
}
// closing resources
scn.close();
dis.close();
dos.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
Anhänge
Zuletzt bearbeitet von einem Moderator: