Socket Client versucht zyklische Verbindung zum Server

tzippy

Mitglied
Hallo!

Ich habe hier ein Gerät, für das ich eine API schreiben will. Das Gerät (ein Gerät zu einer proprietären Funkschnittstelle) ist über Ethernet mit meinem Computer verbunden und soll über Funk empfangene Nachrichten über Ethernet schicken.
Es liegt eine rudimentäre Aneleitung bei, aus der ich nicht richtig schlau werde.
Zunächst soll man dem Gerät eine statische IP zuweisen und die IP des Servers mitteilen.
Das hat auch wunderbar geklappt:

Java:
 Socket s = new Socket("10.0.0.21", 2010);
      PrintWriter out = new PrintWriter(s.getOutputStream(), true);
      out.println("BEFEHL ZUM SETZEN DER EIGENEN UND DER SERVER IP");

Nun meldet sich das Gerät zyklisch alle zehn Sekunden mit "ready" an die IP des Servers auf Port 2003.
Das habe ich per WireShark überprüft.
In der Anleitung steht nun, dass ich diese Verbindungsversuche nun irgendwie annehmen soll. Leider bin ich in der Socket-Programmierung nicht so erfahren.
Dort steht nun:

Port 2001:
Nach erfolgreichem Connect erwartet das Gerät ein „accept“, die aktuelle Uhrzeit (in Millisekunden ab dem 01.01.1970) und den Transferport auf dem er die empfangenen Nachrichten zurücksenden soll.
>> BEFEHL ZUM SETZEN DES TRANSFERPORTS UND DER UHRZEIT

Ich verstehe nicht ganz, was mit "nach erfolgreichem Connect" gemeint ist. Muss ich jetzt auf Port 2001 warten, dass sich das Gerät mit dem "ready" meldet, und wie baue ich dann eine Verbindung auf, so dass ich anschließend den Befehl zum Uhrzeit und Transferport setzen senden kann?

Ich wäre euch wirklich sehr dankbar, wenn ihr mir behilflich wäret!
Danke!
 
Mit dem "accept" ist hoechstwarscheinlich der TCP Verbindungs-Accept gemeint, der bei erfolgreichem
Code:
ServerSocket.accept()[/c] gemacht wird
[code=Java]class Server {
	
	public static void main(final String [] argv) throws Exception {
		final ServerSocket ssock = new ServerSocket(2003);
		
		for(;;) {
			final Socket s = ssock.accept();
			s.getOutputStream().write(("befehl usw"+System.currentTimeMillis()).getBytes());
		}
	}
}
 
mit "accept" ist in diesem Fall der Befehl gemeint, dieser beginnt mit "accept". Ich hab den Befehl hier nur nicht ausgeschrieben, weil ich nicht weiß, inwiefern ich damit das Copyright für die API verletze.
In der Anleitung steht:

Verbindungsaufbau vom Gerät zum Server (zyklisch alle 10 Sekunden bis zum Connect)
Port: 2001
Nach erfolgreichem Connect erwartet der BAP-*‐TX ein „accept“, die aktuelle Uhrzeit (in Millisekunden ab dem 01.01.1970) und den Transferport auf dem er die empfangenen EnOcean-*‐Messages zurücksenden soll.
>> BEFEHL INKL UHRZEIT UND TRANSFERPORT("accept..."

(Die Transferports starten bei 2100)

Ich denke, der PC muss auf Port 2001 horchen, da hier alle zehn Sekunden vom Gerät versucht wird, eine Verbindung herzustellen. Ich hab das mal in Wireshark abfotografiert:
Bildschirmfoto%202011-12-05%20um%2012.54.31.png


Auf dem Port 2003 wird nur das "ready" gesendet um zu prüfen ob das Gerät noch live ist, denke ich.
 
also ich glaube ohne eine genaue bezeichnung der geräte *das teil was du bei dir via ethernet engekoppelt hast und sein gegenpart* ... und vllt ein link zum hersteller oder irgendeiner art von gebrauchsanweisung ... wird das hier reines rätzelraten ...

aber soviel konnte ich rauslesen ...


dein teil versucht sich auf PORT 2001 beim server zu melden ... also musst du auf der server seite *da wo das zweite funktiel steht* auf PORT 2001 einen serversocket mit accept-loop laufen lassen ...

nach dem der client acceptet wurde musst du manuell noch irgendwelche daten über diese dann via funk bestehende tcp-verbindung senden damit das funkteil bei dir das ganz richtig verarbeitetn kann ..


einfach so : ich hab hier so n funkteil und damit probleme ... das hilft weder dir noch uns ... also sag uns bitte wenigstens mal WAS du da genau für geräte hast damit man mal was im netz raussuchen kann ...

wenn du das nicht willst kann ich dich *wie vermutlich auch einige andere* nur darauf verweisen das du selbst bei google nach der gerätebezeichnung in verbindung mit java suchst
 

Zurück
Oben