Socket Verbindung aufbauen

G

grensu

Mitglied
Hallo,

ich habe ein Gerät (Waageterminal), welches über Ethernet angeschlossen ist. Nun möchte ich die nötigen Befehle (String) an das Gerät schicken, damit ich das Gewicht als Antwort bekomme und somit in meinem Programm reagieren kann. Leider bin ich etwas unerfahren. Wie stelle ich das am besten an? Ich habe mich etwas informiert und mit Hilfe von Sockets soll das wohl funktionieren.

Ich benutze Java mit IntelliJ und aktueller JDK

Vielen Dank für eure Hilfe
 
J

Joreyk

Bekanntes Mitglied
Du brauchst die IP adresse von deinem Gerät
Einen Server der über diese IP Adresse Ansprechbar ist
Einen Port Auf den der Server schaut ob was rein kommt
Eine Funktion die das was rein kommt ausliest und interpretiert

Einen Client der Sich mit der IP Adresse und dem Port verbindet
Eine Funktion die ewas an den Server über den Port und die IP schickt


das einfachste ist sowieso einen Terminal Chat zu bauen weil es da 1000 Tutorials gibt
 
G

grensu

Mitglied
Hallo,

vielen Dank für die Antwort!

Ich habe dem Gerät bereits eine feste IP vergeben, anpingen kann man es auch wunderbar.
Dann habe ich versucht eine Verbindung über "Socket" herzustellen.

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;

class StringClient {

    public static void main(String[] args) {
        Socket socket = null;
        try {
            socket = new Socket("192.168.1.43", 1234);

            OutputStream raus = socket.getOutputStream();
            PrintStream ps = new PrintStream(raus, true);
            ps.println("RN1");
           

            InputStream rein = socket.getInputStream();
            System.out.println("verf\u00FCgbare Bytes: " + rein.available());
            BufferedReader buff = new BufferedReader(new InputStreamReader(rein));

            while (buff.ready()) {
                System.out.println(buff.readLine());
            }

        } catch (UnknownHostException e) {
            System.out.println("Unknown Host...");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("IOProbleme...");
            e.printStackTrace();
        } finally {
            if (socket != null)
                try {
                    socket.close();
                    System.out.println("Socket geschlossen...");
                } catch (IOException e) {
                    System.out.println("Socket nicht zu schliessen...");
                    e.printStackTrace();
                }
        }
    }
}

Ich schicke damit den Befehl "RN1" an das Gerät und erwarte eine Antwort. Dieser InputStream ist aber ständig leer:

Also bekomme ich keine Antwort oder ich sende die "Frage" nicht richtig.
Ich habe allerdings auch keinen Server direkt geschrieben. Funktioniert das überhaupt auf gleicher IP?
 
kneitzel

kneitzel

Top Contributor
Was wird denn bei verfügbare Bytes ausgegeben? Ich vermute 0.

Was passiert ist jetzt folgendes:
Du schreibst RN1 zur Waage.
Direkt im Anschluss prüfst Du, ob etwas geantwortet wurde - das ist aber nicht der Fall (Die Waage muss das Paket ja erst bekommen und verarbeiten....)
Dann die Schleife mit dem ready - da aber noch keine Bytes zu lesen sind, ist da auch nichts ready -> while schleife wird vermutlich nie durchlaufen.

Typische Lösungen sind:
a) Du liest direkt per readLine(). Das stoppt die Ausführung, bis der Server geantwortet hat oder die Verbindung geschlossen wurde. Das kann auch ggf. in einem anderen Thread stattfinden.
b) Das alles geht auch asynchron. Dann musst Du aber regelmäßig prüfen: Ist etwas da, das gelesen werden muss? Wenn ja, dann lese ich das. Dazu werden dann aber in der Regel aus dem nio package die Channel verwendet.

Was Du einfach mal machen kannst, ist:
Nimm die while-Schleife mal raus und lass nur das System.out.println(buff.readLine()); da. Dann bekommst Du ggf. eine Zeile Text von der Waage zurück. Das wäre zumindest ein erster schneller Versuch.
 
mihe7

mihe7

Top Contributor
Ich habe dem Gerät bereits eine feste IP vergeben, anpingen kann man es auch wunderbar.
Dann habe ich versucht eine Verbindung über "Socket" herzustellen.
Ich habe allerdings auch keinen Server direkt geschrieben. Funktioniert das überhaupt auf gleicher IP?
Auf dem Host mit der angegebenen IP-Adresse muss ein Serverprogramm laufen, das die Anfragen entgegennimmt. Du musst wissen, auf welchem Port welche Art von Verbindung angenommen wird. Im Beispiel baust Du eine TCP-Verbindung zu Port 1234 auf. Stimmt der Port? Natürlich musst Du auch das Protokoll kennen, über das Du Dich nach dem Verbindungsaufbau mit dem Server unterhalten kannst.
 
G

grensu

Mitglied
Was wird denn bei verfügbare Bytes ausgegeben? Ich vermute 0.

Was passiert ist jetzt folgendes:
Du schreibst RN1 zur Waage.
Direkt im Anschluss prüfst Du, ob etwas geantwortet wurde - das ist aber nicht der Fall (Die Waage muss das Paket ja erst bekommen und verarbeiten....)
Dann die Schleife mit dem ready - da aber noch keine Bytes zu lesen sind, ist da auch nichts ready -> while schleife wird vermutlich nie durchlaufen.

Typische Lösungen sind:
a) Du liest direkt per readLine(). Das stoppt die Ausführung, bis der Server geantwortet hat oder die Verbindung geschlossen wurde. Das kann auch ggf. in einem anderen Thread stattfinden.
b) Das alles geht auch asynchron. Dann musst Du aber regelmäßig prüfen: Ist etwas da, das gelesen werden muss? Wenn ja, dann lese ich das. Dazu werden dann aber in der Regel aus dem nio package die Channel verwendet.

Was Du einfach mal machen kannst, ist:
Nimm die while-Schleife mal raus und lass nur das System.out.println(buff.readLine()); da. Dann bekommst Du ggf. eine Zeile Text von der Waage zurück. Das wäre zumindest ein erster schneller Versuch.
Vielen Dank für die Erklärung! Also was du sagtest stimmt, er wartet und wartet und wartet, bekommt aber keine Antwort vom Server. Die Bytes sind auch 0.

Nun kommt wahrscheinlich das ins Spiel, was mihe7 gepostet hat.

Ich möchte nochmal die Konstellation erklären

Ich habe ein IT3 Waageterminal, welches per Ethernet einfach am LAN Kabel hängt. Dieses hat eine feste IP und ist per Ping auch erreichbar.
Diese Waage hat kein Backend oder so. Das einzige, was ich weis, die Übermittlung der "Befehle" läuft über noAck Protokoll. Habe dies leider noch nie gehört und weis auch nicht, ob das für die Anbindung über TCPIP wichtig ist.
Nun brauche ich anscheinend den Server als Host. Wie stelle ich das am besten an? Ich kann ja auf dem Waageterminal keinen Server aufspielen, ist ja nur ein Gerät.
Bin in dem Gebiet leider noch nicht sehr erfahren.

Die Verbindung von Gerät zu meinem Host/Server muss ja irgendwie stattfinden.

Vielen Dank für die Antworten. .-)
 
L

LimDul

Top Contributor
Nun, du musst exakt wissen:

* Auf welchem Port die Waage hört
* Wie exakt das Protokoll funktioniert, also welche Befehle die Waage auf Protokoll-Ebene in welchem Format erwartet. Das ist normalerweise mehr als nur "einen String hinsenden"

Diese Spezifikation brauchst du zwingend (oder musst Reverse Engineering betreiben, um die zu bekommen - aber das wird noch aufwendig).
 
kneitzel

kneitzel

Top Contributor
Die Frage ist dann erst einmal, wie die Waage überhaupt ansprechbar ist. Der Hersteller Systec schweigt sich in den Hanfbüchern auch etwas aus. Aber ich habe an einer Stelle gefunden, dass da wohl ein Webserver läuft. Also erst einmal schauen, ob man da evtl. mit einem Browser drauf zugreifen kann (Mal mit http und https probieren. Wobei letzteres vermutlich gehen wird!)

Aber zur Not erst einmal an den Hersteller wenden und den fragen, wie das zu bedienen wäre ...
 
G

grensu

Mitglied
Den Port weis ich. Habe auch etwas interessantes im Handbuch gefunden (siehe Bild)
Bild 17.05.21 um 18.19.jpg


Ich habe das Interface "Ethernet" eingestellt.
Die Weboberfläche erreiche ich sogar, muss nur mal Username/Passwort erfragen.

Heißt das jetzt, dass ich mir nicht selber einen Server schreiben muss?
Ich verstehe noch nicht so genau, wie der Server (den ich selber schreibe) mit dem Gerät (nur über Lan Kabel angebunden) kommuniziert.
 
G

grensu

Mitglied
Ich habe es nun geschafft. Der Fehler lag an dem Modus, der bei der IT3 eingestellt war. Es läuft nun. Vielen Dank für die Hilfe.
 
G

grensu

Mitglied
In der Konfig/Service Menü Com0 auf ETH und NoAck Protokoll einstellen. Die Waage muss auf "ONLINE" stehen.
Am besten mal das Handbuch durchforsten.

Dann einfach ein Websocket mit Java aufbauen. Der Server ist quasi das Gerät.
Ansonsten einfach mal Quellcode posten. :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Meeresgott OOP Socket Verbindung richtig Kapseln Java Basics - Anfänger-Themen 0
T socket.close aber verbindung besteht noch Java Basics - Anfänger-Themen 4
E Input/Output Socket bekommt keine Verbindung bei funktionierendem Fremdziel Java Basics - Anfänger-Themen 2
S Bilder über Socket Senden Java Basics - Anfänger-Themen 1
S Asynchrone Socket-Abfragen Java Basics - Anfänger-Themen 5
O Socket by reference übergeben Java Basics - Anfänger-Themen 0
J Socket schließen - Ist eine SocketException unumgänglich? Java Basics - Anfänger-Themen 4
D Socket ---> Server Socket worauf muss ich achten? Java Basics - Anfänger-Themen 2
N Socket-Programmierung Java Basics - Anfänger-Themen 4
M wait/notify bei Socket Java Basics - Anfänger-Themen 4
B Input/Output Socket I/O - outputStream.write(-1) Java Basics - Anfänger-Themen 2
B Socket OutputStream Java Basics - Anfänger-Themen 17
B Socket Kommunikation in beide Richtungen Java Basics - Anfänger-Themen 12
B Socket, args Java Basics - Anfänger-Themen 22
L Socket in JTextArea Java Basics - Anfänger-Themen 9
T Input/Output Zwei InputStreams von einem Socket Java Basics - Anfänger-Themen 2
B Socket Problem Java Basics - Anfänger-Themen 3
F Buffered Image über Socket versenden Java Basics - Anfänger-Themen 6
E Socket InputStream "terminiert" nicht Java Basics - Anfänger-Themen 4
B Threads Interrupt während Socket.read()? Java Basics - Anfänger-Themen 3
M Versand von Nachrichten via Socket (Delay) Java Basics - Anfänger-Themen 21
F socket-problem Java Basics - Anfänger-Themen 6
E Socket (Client) dauerhaft aktiv? Java Basics - Anfänger-Themen 9
D Java - Socket - Datenübertragung Java Basics - Anfänger-Themen 18
E Input/Output einfachen Socket für XML-Anfragen bauen Java Basics - Anfänger-Themen 13
R Cannot find a free socket for the debugger Java Basics - Anfänger-Themen 6
F Socket Kommunikation Java Basics - Anfänger-Themen 4
M "Connection reset" gbxRemote Socket Java Basics - Anfänger-Themen 9
N Files mit Byte an Socket versenden Java Basics - Anfänger-Themen 2
L FTP per Socket Java Basics - Anfänger-Themen 2
M Audio Stream läuft auf :connection abort: socket write error Java Basics - Anfänger-Themen 2
J Socket - BufferedReader lese Problem Java Basics - Anfänger-Themen 2
M Socket Server Java Basics - Anfänger-Themen 9
N Socket Problem? Java Basics - Anfänger-Themen 9
G Socket erstellen dauert sehr lange. Java Basics - Anfänger-Themen 4
H Java Socket Java Basics - Anfänger-Themen 14
A XML Daten über Socket Java Basics - Anfänger-Themen 3
I Allgemeine fragen zu Socket server Java Basics - Anfänger-Themen 6
C Socket Programmierung Java Java Basics - Anfänger-Themen 4
F Socket Instanz auf Klasse welche von Socket erbt zuweisen Java Basics - Anfänger-Themen 3
ven000m Wieso antwortet mein Server nicht mehr (Socket Anwendung) Java Basics - Anfänger-Themen 2
J Daten von einem (char*)Socket einlesen. Java Basics - Anfänger-Themen 3
S Java Socket Java Basics - Anfänger-Themen 3
K Frage zu SdtOut streams bzw. Socket Programmierung Java Basics - Anfänger-Themen 3
M HTTP-Anfragen und Socket Java Basics - Anfänger-Themen 2
A von Socket-Stream lesen Java Basics - Anfänger-Themen 4
M Ändern einer Socket-Eigenscheft aus einem modalen Dialog? Java Basics - Anfänger-Themen 6
I Best Practice Saubere Verbindung zwischen API und Business Layer mit DTO's Java Basics - Anfänger-Themen 2
B Quicksort in Verbindung mit einem Projekt Java Basics - Anfänger-Themen 1
S Verbindung von einer Excel Datei zu Java-- Java Basics - Anfänger-Themen 4
R Error, wenn mehrere Clients gleichzeitig die Verbindung beenden Java Basics - Anfänger-Themen 16
R Keine Verbindung mit MariaDB Java Basics - Anfänger-Themen 18
M Datenbank verbindung Java Basics - Anfänger-Themen 19
J Java Verbindung mit mysql Datenbank Java Basics - Anfänger-Themen 3
R Keine Verbindung zu MySql über Netbeans Java Basics - Anfänger-Themen 15
R Input/Output Verbindung mit mySql-Datenbank Java Basics - Anfänger-Themen 9
J toString-Methode in Verbindung mit varArgs-Konstruktor Java Basics - Anfänger-Themen 18
B Wie steht UML mit Java in Verbindung? Java Basics - Anfänger-Themen 1
P Schleife für insert() und delete() im StringBuilder in Verbindung mit indexOf() Java Basics - Anfänger-Themen 7
P Verbindung von Zwei Kreisen löschen ! Java Basics - Anfänger-Themen 6
D Eine MySQL Verbindung in mehreren Klassen Java Basics - Anfänger-Themen 8
V Was bewirkt das Schlüsselwort extends in Verbindung mit class bzw. public class ? Java Basics - Anfänger-Themen 2
N httpclient - Verbindung hängt ? Java Basics - Anfänger-Themen 13
P Interface Verbindung GUI zum Programm Java Basics - Anfänger-Themen 2
V Arrays aus eigener Klasse erstellt, zuweisung aber spuckt Fehler in verbindung mit main Methode aus. Java Basics - Anfänger-Themen 3
A Erste Schritte Verbindung zu MySQL Datenbank herstellen Java Basics - Anfänger-Themen 7
M Junit Tests durchführen, die eine Verbindung zu einer Daten erfordern Java Basics - Anfänger-Themen 3
E mit java-anwendung internet verbindung unterbrechen Java Basics - Anfänger-Themen 5
L Verbindung von Anwendung mit GUI Java Basics - Anfänger-Themen 6
M Keine Datenbank verbindung Java Basics - Anfänger-Themen 14
S Https Verbindung aufbauen zum File Download Java Basics - Anfänger-Themen 7
H Problem mit Regex in Verbindung mit BufferedReader Java Basics - Anfänger-Themen 4
P Zugriff auf Attribute einer Klasse, zu der keine Verbindung besteht Java Basics - Anfänger-Themen 11
S Fehler beim Auslösen des ActionListeners in Verbindung mit einer Queue Java Basics - Anfänger-Themen 5
S Datentypen Regex in Verbindung mit einem Integer Wert Java Basics - Anfänger-Themen 3
0 Postgres verbindung Java Basics - Anfänger-Themen 4
F Verbindung zu MySql Datenbank Java Basics - Anfänger-Themen 4
B Verbindung zu einen anderen Rechner Java Basics - Anfänger-Themen 2
B Derby-Java-Verbindung Java Basics - Anfänger-Themen 2
I Datenbank - nach erster Verbindung keine Verbindung mehr Java Basics - Anfänger-Themen 3
J Access-Verbindung Java Basics - Anfänger-Themen 2
H Probleme mit .Jar in Verbindung mit Bildern Java Basics - Anfänger-Themen 10
S Verbindung Klassen<-> Klassen/DB Java Basics - Anfänger-Themen 2
E DB-Verbindung zu OpenOffice: Base Java Basics - Anfänger-Themen 3
J VPN Verbindung Java Basics - Anfänger-Themen 6
M Verbindung zu einem Server über Eclipse Java Basics - Anfänger-Themen 6
G FTP Verbindung in Applet Java Basics - Anfänger-Themen 3
S Java Applet - Verbindung zum Eigenen Server Java Basics - Anfänger-Themen 2
J DB-Verbindung Java Basics - Anfänger-Themen 2
TiME-SPLiNTER mehrere HTTPRequests mit selber Verbindung Java Basics - Anfänger-Themen 2
F Peer-to-Peer Verbindung? Java Basics - Anfänger-Themen 5
B Verbindung zur Datenbank (SQL.) Java Basics - Anfänger-Themen 13
R Java, Bluetooth: mit PC eine SPP Verbindung aufbauen Java Basics - Anfänger-Themen 1
G Link Verbindung Java Basics - Anfänger-Themen 2
G Verbindung zu einer Oracle DB aufbauen Java Basics - Anfänger-Themen 2
K Verbindung zu MySQL Java Basics - Anfänger-Themen 4
G Verbindung herstellen Java Basics - Anfänger-Themen 3
M Telnet Verbindung aufbauen Java Basics - Anfänger-Themen 2
M SQL Verbindung Java Basics - Anfänger-Themen 9
B Client - Server Verbindung über sockets mysql DB ansprechen? Java Basics - Anfänger-Themen 6

Ähnliche Java Themen


Oben