ich habe vor zu einer besseren Identifzierung von Clients die RemoteSocketAddress zu benutzen.
Dazu habe ich vor ein Array zu erstellen welches als Index die RemoteSocketAddress benutzt und dann mir eine ID ausgibt, welche auf andere Arrays verweist.
Versteht ihr was ich meine?
Danke im Voraus für eure Mühe!
Wäre es möglich ein ArrayList zu nutzen und das ich dann indexOf benutze?
So wie im Beispiel?
Java:
privateArrayList<String> player;
player =newArrayList<String>(); player.add(String.valueOf(socket.getRemoteSocketAddress()));System.out.println(player.indexOf(String.valueOf(socket.getRemoteSocketAddress())));
public class Test
{
public static void main(String[] args)
throws Exception
{
Socket socket = new Socket("www.gmx.de", 80);
ArrayList<String> player;
player = new ArrayList<String>();
player.add(String.valueOf(socket.getRemoteSocketAddress()));
System.out.println(player.indexOf(String.valueOf(socket.getRemoteSocketAddress())));
System.out.println(player);
}
}
-------
Ausgabe:
0
[[url]www.gmx.de/217.72.204.254:80][/url]
import java.net.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class ppServer extends Thread
{
protected Socket socket = null;
private static int port = 4711;
private int anzahl= 0;
private ppServer ps;
private static ppServerGUI pps;
private ArrayList<String> player;
public static void main(String args[]) {
pps = new ppServerGUI();
pps.gui("Ping Pong Server");
pps.text("Ping Pong Server Start ...");
// Socket bereitstellen, an dem "gelauscht" wird
try {
ServerSocket listen = new ServerSocket(port);
while(true) {
ppServer pClient = new ppServer(listen.accept());
}
} catch (IOException ioe) {
pps.text("Fehler: "+ioe.toString());
}
}
public ppServer(Socket socket) {
player = new ArrayList<String>();
this.socket = socket;
start();
}
public void run() {
try {
InputStreamReader isr = new InputStreamReader(socket.getInputStream());
OutputStreamWriter osw = new OutputStreamWriter(socket.getOutputStream());
BufferedReader in = new BufferedReader(isr);
PrintWriter out = new PrintWriter(osw, true);
System.out.println(anzahl);
String tmp;
pps.text(socket.getRemoteSocketAddress()+" Verbindung zu Client hergestellt!");
player.add(String.valueOf(socket.getRemoteSocketAddress()));
System.out.println(player.indexOf(String.valueOf(socket.getRemoteSocketAddress())));
while ((tmp =in.readLine()) != null)
{
if (tmp.startsWith("bat "))
{
tmp = tmp.replace("bat ", "");
}
}
pps.text(socket.getRemoteSocketAddress()+" Verbindung zu Client getrennt!");
socket.close();
} catch (IOException e) {
System.err.println("Fehler: "+e.toString());
try {
socket.close();
pps.text("Verbindung getrennt!");
} catch (Exception f)
{ }
}
}
}
Und ich habe es schon mit zwei Rechner getestet, aber es funktioniert.
Er zeigt zwei Adressen in meiner Console an, aber listet diese nicht ...
Was meinst du?
Woran könnte das liegen?
daran dass du das falsch bedienst oder die Ergebnisse falsch interpretierts,
was kommt denn als Ausgabe? bist du sicher, dass du die richtige Ausgabe und keine ganz andere liest?
führe nicht indexOf aus, sondern speichere den zweiten erzeugten String in einer Variable,
führe indexOf mit dieser String-Variable aus,
hole den ersten String aus der Liste,
vergleiche die beiden Strings mit equals,
(beide ausgeben sowieso)
vergleiche die Strings char-Weise falls sie immer noch nicht equal sind und der Unterschied nicht zu erkennen ist
Also ich habe ja meine selbst geschriebene Console und diese gibt hierdurch bedingt:
pps.text(socket.getRemoteSocketAddress()+" Verbindung zu Client hergestellt!");
Die Adresse richtig aus.
Oder muss ich wie bei ReadLine am Besten das in eine Variable packen und damit arbeiten?
Damit es auch immer dieselbe Adresse bleibt?
Er gibt immer 0 aus ...
vielleicht weil die Liste inzwischen geleert wird, neu angelegt wird,
du in einem ganz neuen Objekt bist, den ersten Wert in der Liste auch überschreibst oder sonstwas
sei doch bitte nicht so unflexibel und jammer immer nur rum,
gib die Liste aus!
du wirst nie eine Ausgabe erhalten 'Element 0: a, Element 1: b, Index von b = 0',
sondern entweder enthält die Liste nur b an Stelle 0 und nix weiter oder b an Positition 0 und 1
vielleicht ist auch die getRemoteSocketAddress()-Abfrage vom Socket für beide Verbindungen gleich?
so viele Möglichkeiten die alle mit den einfachsten System.out.println()-Befehlen von jedem Kleinkind zu klären sind,
wenn man nur davorsteht und sagst 'geht nicht',
ja dann gehts tatsächlich nicht... :roll:
Danke für die Tipps ...
Hatte heute irgendwie ein Brett vor dem Kopf ...
So habe mir das Array mal ausgeben lassen.
Es scheint als ob es geleert wird und dann neu erstellt.
Und das war auch der Fehler!
Er erstellt für jede Verbindung eine neue ArrayList.
Habe nun das Erstellen der ArrayList in die Main-Methode gepackt und nun geht alles ...