Socket Class über Netzwerk verschicken

Der Kekser

Neues Mitglied
Hallo zusammen,

ich habe ein Problem mit dem Verschicken einer Class über das Netzwerk. Das Problem ist, dass der Empfänger diese nicht lesen kann. Deshalb schreibe ich hier um nach Rat zu fragen.

Normal Variablen kann ich ohne Problem verschicken, das Problem ist nur das Übertragen der Class

Das ist der Server
Java:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;

public class Server {
	public static Dimension size = new Dimension(300, 300);
	
	public static int port = 2406;
	public static String ip = "";
	
	public static ServerSocket server;
	
	public static int maxPlayers = 5;
	public static int playerLoggedin = 0;
	
	public static JPanel content;
	public static JList list_clients;
	public static DefaultListModel list_clients_model;

	//Statelist:
	//0 = Nothing
	//1 = Client is on
	//2 = Client disconnect
	//3 = Client kick
	
	public static int[] statelist = new int[maxPlayers];
	public static Socket[] socketlist = new Socket[maxPlayers];
	public static String[] namelist = new String[maxPlayers];
	public static DataPackage[] datalist = new DataPackage[maxPlayers];
	
	public static int maxTimeouts = 10;
	public static int[] timeouts = new int[maxPlayers];
	public static long[] timesetTimeout = new long[maxPlayers];
	
	public static void disconnectUser(int index){
		try{
			list_clients_model.addElement("Disconnect: " + socketlist[index].getInetAddress().getHostAddress() + " - " + namelist[index]);
		}catch (Exception e) {}
		
		socketlist[index] = null;
		namelist[index] = null;
		datalist[index] = null;
		statelist[index] = 0;
		
		playerLoggedin--;
			
	}
	
	private static Runnable accept = new Runnable()
	{
		public void run()
		{
			new Thread(send).start();
			new Thread(receive).start();
			
			while (true)
			{
				try
				{
					Socket socket = server.accept();
					
					ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
					
					String username = (String) ois.readObject();
					
					boolean accepted = true;
					
					for(int i = 0; i < maxPlayers; i++){
						if(username.equals(namelist[i])){
							accepted = false;
						}
					}
					
					ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
					
					if(accepted && playerLoggedin < maxPlayers){
						oos.writeObject("Welcome To This Server...");
						for(int i = 0; i < maxPlayers; i++){
							if(statelist[i] == 0){
								socketlist[i] = socket;
								namelist[i] = username;
								datalist[i] = new DataPackage();
								datalist[i].username = username;
								statelist[i] = 1;
								
								timesetTimeout[i] = System.currentTimeMillis();
								
								list_clients_model.addElement("Connect: " + socket.getInetAddress().getHostAddress() + " - " + datalist[i].username);
								
								playerLoggedin++;
								
								break;
							}
						}
					} else if(accepted && playerLoggedin >= maxPlayers) {
						oos.writeObject("Max Players!");
					} else {
						oos.writeObject("User is already logged in!");
					}
				}
				catch (Exception e) {}
			}
		}
	};
	
	private static Runnable send = new Runnable() {
		public void run() {
			
			ObjectOutputStream oos;
			
			while (true) {
				for (int i = 0; i < maxPlayers; i++) {
					if(statelist[i] != 0) {
						int client_state = statelist[i];
						
						try {
							oos = new ObjectOutputStream(socketlist[i].getOutputStream());
							oos.writeObject(client_state);
							
							oos = new ObjectOutputStream(socketlist[i].getOutputStream());
							oos.writeObject(datalist);
							
							timeouts[i] = 0;
						} catch (Exception ex) {
							
							if(System.currentTimeMillis() > timesetTimeout[i] + 1000){
								timeouts[i]++;
								timesetTimeout[i] = System.currentTimeMillis();
								try{
									list_clients_model.addElement("Timeout: " + socketlist[i].getInetAddress().getHostAddress() + " - " + namelist[i] + " - " + timeouts[i]);
								}catch (Exception e) {}
							}
							
							if(timeouts[i] > maxTimeouts){
								disconnectUser(i);
							}
						}
						
						if (client_state == 3) // Kicked by Server
						{
							disconnectUser(i);
						}
						else if (client_state == 2) // Server Disconnected
						{
							disconnectUser(i);
						}
					}
				}
			}
		}
	};
	
	private static Runnable receive = new Runnable() {
		public void run() {
			ObjectInputStream ois;
			
			while (true) {
				for (int i = 0; i < maxPlayers; i++) {
					if(statelist[i] != 0) {
						int receive_state = 1;
						try {
							ois = new ObjectInputStream(socketlist[i].getInputStream());
							receive_state = (Integer) ois.readObject();
							
							ois = new ObjectInputStream(socketlist[i].getInputStream());
							DataPackage dp = (DataPackage) ois.readObject();
							
							datalist[i] = dp;
						}
						catch (Exception ex) { // Client Disconnected (Client Didn't Notify Server About Disconnecting)
							//disconnectUser(i);
						}
						
						if (receive_state == 2) // Client Disconnected by User
						{
							statelist[i] = 2;
							disconnectUser(i);
						}
					}
				}
			}
		}
	};
	
	public static void main(String args[]) {
		JFrame frame = new JFrame();
		
		list_clients_model = new DefaultListModel();
		list_clients = new JList(list_clients_model);
		
		content = new JPanel();
		content.setLayout(new BorderLayout(1, 1));
		content.add(new JScrollPane(list_clients), BorderLayout.CENTER);
		content.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
		frame.setContentPane(content);
		
		frame.setPreferredSize(size);
		frame.pack();
		frame.setTitle("");
		frame.setResizable(false);
		frame.setLocationRelativeTo(null);
		frame.addWindowListener(new WindowListener()
		{
			public void windowActivated(WindowEvent e) {}
			public void windowClosed(WindowEvent e) {}
			
			public void windowClosing(WindowEvent e)
			{
				boolean allloggedout = false;
				while (!allloggedout)
				{
					try
					{
						for (int i = 0; i < maxPlayers; i++)
						{
							statelist[i] = 2;
						}
						
						allloggedout = true;
						for (int i = 0; i < maxPlayers; i++)
						{
							if(socketlist[i] != null){
								allloggedout = false;
							}
						}
					}
					catch (Exception ex) {}
				}
				
				System.exit(0);
			}
			
			public void windowDeactivated(WindowEvent e) {}
			public void windowDeiconified(WindowEvent e) {}
			public void windowIconified(WindowEvent e) {}
			public void windowOpened(WindowEvent e) {}
		});
		frame.setVisible(true);
		
		try
		{
			ip = InetAddress.getLocalHost().getHostAddress() + ":" + port;
			
			server = new ServerSocket(port, 0, InetAddress.getLocalHost());
			new Thread(accept).start();
		}
		catch (IOException ex)
		{
			JOptionPane.showMessageDialog(null, "Error: " + ex.getMessage(), "Alert", JOptionPane.ERROR_MESSAGE);
			System.exit(0);
		}

	}
}

Das ist der Client
Java:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;

public class Client
{
	public static Dimension size = new Dimension(300, 300);
	
	public static Socket socket;
	
	public static int port = 2406;
	public static String ip = "";
	
	public static String username = "";
	
	public static int client_state = 1;
	
	private static Runnable send = new Runnable() {
		public void run() {
			ObjectOutputStream oos;
			
			while(true){
				try {
					DataPackage dp = new DataPackage();
					dp.x = 0;
					dp.y = 0;
					dp.dir = 0;
					dp.angle = 0;
					dp.username = username;
					
					oos = new ObjectOutputStream(socket.getOutputStream());
					oos.writeObject(client_state);
					
					oos = new ObjectOutputStream(socket.getOutputStream());
					oos.writeObject(dp);
					
				} catch (Exception ex) {}
			}
		}
	};
	
	private static Runnable receive = new Runnable() {
		public void run() {
			ObjectInputStream ois;
			
			while(true){
				int receive_state = 1;
				try {
					ois = new ObjectInputStream(socket.getInputStream());
					receive_state = (Integer)ois.readObject();
					
					ois = new ObjectInputStream(socket.getInputStream());
					DataPackage[] dp = (DataPackage[]) ois.readObject();
					
				} catch (Exception ex) {}
				
				if(receive_state == 2){
					JOptionPane.showMessageDialog(null, "Server Disconnected", "Message", JOptionPane.INFORMATION_MESSAGE);
					System.exit(0);
				}
			}
		}
	};
	
	public static void main(String[] args)
	{
		JFrame frame = new JFrame();
		
		frame.setPreferredSize(size);
		frame.pack();
		frame.setTitle("");
		frame.setResizable(false);
		frame.setLocationRelativeTo(null);
		frame.addWindowListener(new WindowListener()
		{
			public void windowActivated(WindowEvent e) {}
			public void windowClosed(WindowEvent e) {}
			
			public void windowClosing(WindowEvent e)
			{
				
				client_state = 2;
			}
			
			public void windowDeactivated(WindowEvent e) {}
			public void windowDeiconified(WindowEvent e) {}
			public void windowIconified(WindowEvent e) {}
			public void windowOpened(WindowEvent e) {}
		});
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		
		
		try
		{
			String local;
			
			try
			{
				local = InetAddress.getLocalHost().getHostAddress() + ":" + port;
			}
			catch (UnknownHostException ex)
			{
				local = "Network Error";
			}
			
			ip = (String) JOptionPane.showInputDialog(null, "IP: ", "Info", JOptionPane.INFORMATION_MESSAGE, null, null, local);
			
			port = Integer.parseInt(ip.substring(ip.indexOf(":") + 1));
			ip = ip.substring(0, ip.indexOf(":"));
			
			socket = new Socket(ip, port);
			
			username = System.getProperty("user.name");
			username = (String) JOptionPane.showInputDialog(null, "Username: ", "Info", JOptionPane.INFORMATION_MESSAGE, null, null, username);
			
			ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
			oos.writeObject(username);
			
			ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
			String response = (String) ois.readObject();
			
			JOptionPane.showMessageDialog(null, response, "Message", JOptionPane.INFORMATION_MESSAGE);
			
			if(response.equalsIgnoreCase("User is already logged in!")||response.equalsIgnoreCase("Max Players!")){
				System.exit(0);
			}
		}
		catch (Exception ex)
		{
			JOptionPane.showMessageDialog(null, "Error: " + ex.getMessage(), "Alert", JOptionPane.ERROR_MESSAGE);
			System.exit(0);
		}	
		
		new Thread(send).start();
		new Thread(receive).start();
	}
}

Und das ist die Klasse, die verschickt werden soll. Sie ist be Server und Client gleich.
Java:
import java.io.Serializable;

public class DataPackage implements Serializable
{
	private static final long serialVersionUID = 1L;
	
	public double x = 0;
	public double y = 0;
	
	public double dir = 0;
	public double angle = 0;
	
	public String username = "";
	
	public DataPackage() {
	}
}

Ich danke für jede art von hilfe.
 

Der Kekser

Neues Mitglied
Oh hab den Fehler selber gefunden. Sitze schon den ganzen tag am suchen und finde nichts und dann plötzlich hat man einen geistesblitz. Ich hatte einen tippfehler im Package, so dass das als 2 verschieden wahrgenommen wurde. Die hätten aber gleich sien müssen. -.- Ist mir jetzt etwas Peinlich.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D ...class.getResourceAsStream("/meine.properties") funktioniert nicht über RMI? Netzwerkprogrammierung 3
E rmic - class not Found Netzwerkprogrammierung 2
B FTP *.class download Netzwerkprogrammierung 2
Semox Shell Script in Java Class aufrufen Netzwerkprogrammierung 2
M Class-Datei aus Eclipse mit Xampp Netzwerkprogrammierung 4
Kr0e Serialisieren von Class<?> Netzwerkprogrammierung 2
Saxony RMI - eigene Registry (no security manager: RMI class loader disabled) Netzwerkprogrammierung 6
2 Class mit ServerSocket erbt von Thread? Netzwerkprogrammierung 3
H RMI und class incompatible Netzwerkprogrammierung 11
M Falsche Instanz vom Class Loader zurück bekommen Netzwerkprogrammierung 8
P RMI - meine Stub-Class wird nicht gefunden Netzwerkprogrammierung 9
R "Class not found" trotz gesetztem CLASSPATH Netzwerkprogrammierung 4
K Tabelle im Web über Listener aufrufen Netzwerkprogrammierung 1
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
S Socket Bilder über Socket Senden Netzwerkprogrammierung 0
B Zip Dateien über FTP laden Netzwerkprogrammierung 2
x46 byte[] über BufferedReader auslesen Netzwerkprogrammierung 18
E Socket Parameter über Sockets übergeben und auslesen ! Netzwerkprogrammierung 5
L Webbasierte Anwendung - Authentifizierung über LDAP/ActiveDirectory Netzwerkprogrammierung 5
J Probleme mit Multicast über IPv6, DatagramChannel Netzwerkprogrammierung 1
S Daten über TCP/IP senden Netzwerkprogrammierung 3
T Broadcast-message über spez. Netzwerk-Schnittstelle Netzwerkprogrammierung 1
T Mikrofonaudio über Java Server an Webbrowser streamen Netzwerkprogrammierung 13
M Erstelltes Programm über Internet Browser ausführen Netzwerkprogrammierung 26
T VPN-Verbindung über Java Netzwerkprogrammierung 4
V Einfachen Javaserver über das Internet erreichbar machen Netzwerkprogrammierung 2
J FTP Upload über Proxy funktioniert nicht Netzwerkprogrammierung 1
E Kurze Textnachrichten über einen Server von meinem Handy auf den Computer laden. Netzwerkprogrammierung 9
J FTP FTP Zugriff über Proxy Server Netzwerkprogrammierung 1
Thallius Java Application über ZScaler benutzer? Netzwerkprogrammierung 0
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
V einfaches hin und her von Text über Server Netzwerkprogrammierung 2
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
antonbracke Multiuser Software über XMPP Server Netzwerkprogrammierung 1
Z Verbindung zwischen 2 Rechnern über ServerSockets nicht möglich Netzwerkprogrammierung 3
cezary Socket ServerSocket starten über GUIIm unterstehenden Code versuche Netzwerkprogrammierung 6
I ASCII über serielle Schnittstelle Netzwerkprogrammierung 1
N RMI "RMI über Lan funktioniert nicht" & "RMI-Server im Lan scannen" Netzwerkprogrammierung 13
L Mit Java über PHP in MySQL anmelden (Login script) Netzwerkprogrammierung 3
M Socket String Arrays über Socket an Server schicken Netzwerkprogrammierung 2
T Socket Methoden über Internet aufrufen Netzwerkprogrammierung 1
S Socket Kommunikation über Internet Netzwerkprogrammierung 1
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
K ByteArray über Netzwerk senden klappt nicht Netzwerkprogrammierung 5
M allgemeine Frage über Server-Client-Kommunikation Netzwerkprogrammierung 5
P RMI Threads die über RMI auf Datenbank zugreifen Netzwerkprogrammierung 2
S Datei schreiben über Applet Netzwerkprogrammierung 8
G Klassen über Netzwerk kommunizieren lassen Netzwerkprogrammierung 6
J Erster Server-Client läuft auf lokalem Rechner problemlos. Zwei Rechner über das Internet nicht Netzwerkprogrammierung 8
Kjubert Synchronisieren von Objekten über Client/Server - bester Weg? Netzwerkprogrammierung 7
S ImageIcon über Socket schicken (Serialisierung) Netzwerkprogrammierung 6
H Socket Objekte über Socket? Allgemeine Verständnisprobleme in Sachen Socket Netzwerkprogrammierung 3
S Seltsames Verhalten beim Empfangen von Daten über DataInputStream Netzwerkprogrammierung 12
A TCP über UDP Verbindung? Netzwerkprogrammierung 10
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9
D JNLP über Webstart funktioniert nicht... Netzwerkprogrammierung 2
J Socket Dateien über Socket auf Server speichern Netzwerkprogrammierung 3
D Socket Datei nur stückweise über Socket verschicken Netzwerkprogrammierung 6
G Bild über Socket schicken - Client/Server Netzwerkprogrammierung 10
A Computer über Internet verbinden Netzwerkprogrammierung 12
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
c_sidi90 ideale Lösung, Screen Capture über Netzwerk Netzwerkprogrammierung 3
S Socket Verschiedene Exceptions beim Übertragen von Bildern über Socket Netzwerkprogrammierung 20
T ArrayList über Netzwerk senden! Netzwerkprogrammierung 5
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
T Verbindungsversuche über TCP Sockets von mehreren Threads führt zu Serverabsturz Netzwerkprogrammierung 2
V Authentifikation über mehrere Server? Netzwerkprogrammierung 3
C Verbindung zu einem Hostrechner über das Internet herstellen Netzwerkprogrammierung 15
M Map über Webservice übertragen Netzwerkprogrammierung 3
D Mehrere Clients über Java-Sockets Netzwerkprogrammierung 13
P Socket Verbindung über das Internet Netzwerkprogrammierung 2
Z Socket Connection reset by peer nur per IP nicht über localhost Netzwerkprogrammierung 13
ruffio1978 Telnet über ein socket ansprechen Netzwerkprogrammierung 8
F Socket Verbindungen über mehrere Server Netzwerkprogrammierung 4
U Datei über das Netzwerk einlesen und speichern Netzwerkprogrammierung 8
G Klassen über JMX per URLClassloader laden? Netzwerkprogrammierung 2
E Zwei PCs über das Internet miteinander verbinden? Netzwerkprogrammierung 3
E Socketverbindung über das Internet - Timeout? Netzwerkprogrammierung 28
M Socket Bilder über das Netzwerk übertragen Netzwerkprogrammierung 4
E Java über Socket ins Internet? Netzwerkprogrammierung 4
F Socket Daten über verschiedene IP's schicken Netzwerkprogrammierung 5
M Socket JavaProg über einen Clienten steuern Netzwerkprogrammierung 5
M Mail über Exchange versenden Netzwerkprogrammierung 13
F C/S über HTTPS Netzwerkprogrammierung 2
M ganymed-ssh2.har: ftp-Verbindung über ftp-Proxy Netzwerkprogrammierung 2
J Probleme bei RSA mit byte[] bei Versand über RMI Netzwerkprogrammierung 2
Z File über Socket lesen Netzwerkprogrammierung 3
A HTTP Binärdaten über PHP-Skript in Datenbank schreiben bzw auslesen Netzwerkprogrammierung 2
M Objekt über Object-Stream, empfange "alte" Daten Netzwerkprogrammierung 2
P FTP isFile() über FTP Netzwerkprogrammierung 3
I Socket HTTP Nachrichten über Sockets verschicken Netzwerkprogrammierung 2
N String als byte Array über Socket versenden Netzwerkprogrammierung 8
M Objekt über socket senden/empfangen Netzwerkprogrammierung 3
N Socket File über Socket vom Server an Client versenden Netzwerkprogrammierung 15
P Socket Problem mit Netzwerkverbindung über TCP Netzwerkprogrammierung 12
A UCP Connection über Proxy möglich? Netzwerkprogrammierung 7
V Verbindung zweier Rechner über das Internet mit Sockets Netzwerkprogrammierung 8
F Char über Netzwerk senden Netzwerkprogrammierung 6
S HTTP Login mit CAS Authentisierung über SSL Netzwerkprogrammierung 2
C Befehle über ein GUI an Server senden Netzwerkprogrammierung 15

Ähnliche Java Themen

Neue Themen


Oben