Forum: PC-Programmierung serial UDP server


von ch (Gast)


Lesenswert?

Kennt jemand von euch ein Open-Source Programm, das Daten von der 
seriellen Schnittstelle aufnimmt und über UDP versendet?
Es sollte Platform unabhängig sein, so dass man es unter Linux, Windows 
und Mac benutzen kann.

Als Beispiel könnte ein kommerzielles Programm für TCP dienen:
http://www.serial-server.net/serial-over-ip/

Hier habe ich einen UDP-Serial-Server gefunden, aber das scheint mir nur 
für den RPi zu sein:
https://github.com/AL333Z/arduino-udp-msgservice/blob/master/src/msglib/BroadcastSerialCommChannel.java

: Verschoben durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

ch schrieb:
> Es sollte Platform unabhängig sein, so dass man es unter Linux, Windows
> und Mac benutzen kann.

Das ist gerade bei der Ansteuerung serieller Schnittstellen gar nicht so 
einfach, da haben die drei nämlich sehr weit auseinanderliegende 
Vorstellungen davon, wie das geht.

Wenn Du Eigenentwicklungen nicht abhold bist, könntest Du dem hier die 
plattformübergreifende Ansteuerung der seriellen Schnittstelle 
entnehmen:

https://iftools.com/opensource/wxterm.de.php


Möglicherweise findet sich auch hier was:

https://iftools.com/opensource/ctb.de.php

von Ulli (Gast)


Lesenswert?

Muss es ein Open source Programm sein ? ich mache das mit billigen 
Wandlern
Ebay 271890553929
Sind echt gut die dinger.

von hp-freund (Gast)


Lesenswert?


von nicht“Gast„ (Gast)


Lesenswert?

Moin,


Nimm socat. Da kann alles, was du willst

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Mit ein par Zeilen Java sollte das zu machen sein ...

von Christian M. (Gast)


Lesenswert?

Evtl. mit:
http://www.hw-group.com/products/hw_vsp/hw_vsp2_de.html
für Windows. Damit und mit "Herkules" vom gleichen Hersteller mache ich 
alles.

Aber für so eine Einfache Sache tut's auch ein kleiner Mikrocontroller 
(auch Arduino), dann bist Du

ch schrieb:
> Platform unabhängig

Willst Du einen ganzen Rechner nur dafür nutzen, oder laufen da noch 
andere Sachen drauf, und die Serielle ist virtual, oder die Datenpakete 
werden local weiterverwendet (127.0.0.1)? Sehr seltsam...

Gruss Chregu

von Pandur S. (jetztnicht)


Lesenswert?

Ein Vorteil von UDP ist, dass man mit einem Browser interfacen kann...

von Fabian H. (hdr)


Lesenswert?

Oder D. schrieb:
> Ein Vorteil von UDP ist, dass man mit einem Browser interfacen
> kann...

Verstehe ich nicht.

von Pandur S. (jetztnicht)


Lesenswert?

Naja. Wenn man auf einem PC einen Serial-zu-UDP Konverter hat, kann man 
auf dem seriellen Device einen Webserver laufen lassen, der sich vom 
Browser des PCs bedienen laesst. Das Device muss sein Protokoll nur in 
eine Webseite einpacken, was etwas Text Overhead ist. Und ueber die 
serielle Schnittstelle damit.

Geht gut. Sehr praktisch, sehr Platformunabhaengig.

von lrlr (Gast)


Lesenswert?

>Geht gut. Sehr praktisch, sehr Platformunabhaengig.

und hat nichts mit UDP zu tun..

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Bei UDP hat man einfach das Problem, das die Serielle Schnittstelle 
nicht Paketorientiert ist. Also musst du entweder mit Timouts oder mit 
einem Protokoll arbeiten, weswegen es wohl sehr wenige Lösungen dafür 
geben wird wo man nicht wenigstens einen Teil selbst betragen muss.

von Vlad T. (vlad_tepesch)


Lesenswert?

Läubi .. schrieb:
> Bei UDP hat man einfach das Problem, das die Serielle Schnittstelle
> nicht Paketorientiert ist. Also musst du entweder mit Timouts oder mit
> einem Protokoll arbeiten, weswegen es wohl sehr wenige Lösungen dafür
> geben wird wo man nicht wenigstens einen Teil selbst betragen muss.

naja, wenn man sich auf zeilen mit \n oder \r als trennzeichen einigt, 
passt das doch ganz gut in ein paket.
Ein solches Programm so zu schreiben, dass es parameterisierbar ist, ob 
es Blockweise oder Zeilenweise (mit frei konfigurierbaren 
Trennzeichen/Trennsequenz) arbeitet, sollte ein leichtes sein und halte 
ich für nicht so abwegig/speziell, dass es nicht für viele brauchbar 
wäre.

von Christian L. (christian182)


Lesenswert?

Ich halte UDP auch für weniger geeignet. Nicht nur aufgrund der 
Problematik bezüglich der Datagrammeigenschaft, sondern auch wegen den 
fehlenden Mechanismen zur Einhaltung der Reihenfolge. Klar kann man 
diese Problematik auf der Anwendungsebene bearbeiten, aber dann würde 
ich schon fast zu TCP tendieren...

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Vlad T. schrieb:
> sollte ein leichtes sein

Mit diesen Worten fangen die Probleme an ;-)

Der Teufel steckt halt doch im Detail. Dann geht ein Paket verloren und 
nu? Reihenfolge wurde ja schon angesprochen.

Die Umsetzung auf TCP ist da sehr viel natürlicher da beides Streams von 
Bytes sind, mit Hardware-Handshake hat man sogar ein recht zuverlässiges 
Flow-Control.

von Tim Taylor (Gast)


Lesenswert?

Warum macht ihr es so kompliziert? Ein Datagramm pro Zeichen und gut 
ist. Was die Nichteinhaltung der Reihenfolge angeht ist es immer wieder 
erstaunlich mit wie wenig Erfahrung Leute die tollsten Sachen behaupten.

Ich habe für ein Projekt die Datenverteilung von mehreren hundert GB 
über UDP Broadcasts im LAN getestet, Fazit aus diesen Tests war das es 
in keinem (!) Fall zu einer Nichteinhaltung der Paketreihenfolge kam. 
Auch die generelle Paketfehlerrate (Nicht übermitteltes 
Paket/fehlerhaftes Paket) lag deutlich unter einem ppm.
Danach wurde Testweise mal eine Unicast UDP-Übertragung mit gleicher 
Datenmenge übers Internet getestet (knapp 20 HOPs), ebenfalls mit sehr 
geringer Paketfehlerrate (gegenüber dem LAN allerdings doch deutlich 
erhöht) und wieder ohne einem einzigen Fehler in der Reihenfolge...

von chris_ (Gast)


Lesenswert?

>Autor: Frank Esselbach (Firma: Q3) (qualidat)
>Mit ein par Zeilen Java sollte das zu machen sein ...

Jetzt sollte es eigentlich funktionieren sagte der Entwickler .... 
danach dauerte es noch 2 Wochen ...

So ist das mit der Entwicklung: eigentlich sollte es gehen, tut es 
aber nicht.

Hier ein schönes Beispiel für ein einfaches, kleines Java-Programm, 
welches die Zeichen auf ein Textfenster ausgibt.

Beitrag "Re: Java serielle Schnittstelle mit JSSC"

Eigentlich sollte es funktionieren. Tut es auch, wenn da nicht die 
Hälfte der Zeichen fehlen würde ...

von pp (Gast)


Lesenswert?

Tim Taylor schrieb:
> Ich habe für ein Projekt die Datenverteilung von mehreren hundert GB
> über UDP Broadcasts im LAN getestet, Fazit aus diesen Tests war das es
> in keinem (!) Fall zu einer Nichteinhaltung der Paketreihenfolge kam.
> Auch die generelle Paketfehlerrate (Nicht übermitteltes
> Paket/fehlerhaftes Paket) lag deutlich unter einem ppm.
> Danach wurde Testweise mal eine Unicast UDP-Übertragung mit gleicher
> Datenmenge übers Internet getestet (knapp 20 HOPs), ebenfalls mit sehr
> geringer Paketfehlerrate (gegenüber dem LAN allerdings doch deutlich
> erhöht) und wieder ohne einem einzigen Fehler in der Reihenfolge...

du kannst dich aber nunmal nicht drauf verlassen.... ich hoffe nur das 
du keine wichtigen anwendungen baust.

von pp (Gast)


Lesenswert?

pp schrieb:
> Tim Taylor schrieb:
>> Ich habe für ein Projekt die Datenverteilung von mehreren hundert GB
>> über UDP Broadcasts im LAN getestet, Fazit aus diesen Tests war das es
>> in keinem (!) Fall zu einer Nichteinhaltung der Paketreihenfolge kam.
>> Auch die generelle Paketfehlerrate (Nicht übermitteltes
>> Paket/fehlerhaftes Paket) lag deutlich unter einem ppm.
>> Danach wurde Testweise mal eine Unicast UDP-Übertragung mit gleicher
>> Datenmenge übers Internet getestet (knapp 20 HOPs), ebenfalls mit sehr
>> geringer Paketfehlerrate (gegenüber dem LAN allerdings doch deutlich
>> erhöht) und wieder ohne einem einzigen Fehler in der Reihenfolge...
>
> du kannst dich aber nunmal nicht drauf verlassen.... ich hoffe nur das
> du keine wichtigen anwendungen baust.

P.S.: Warum macht man dann keinen Multicast?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

chris_ schrieb:
> Eigentlich sollte es funktionieren.

Hat aber nix mit der Seriellen Schnittstelle zu tun sondern das da "mal 
eben" was zusammengestoppelt wird. Außerdem wird da auch wieder versucht 
irgendwie Eventbasiert die Serielle Schnitstelle auszulesen was 
eigentlich nur unnötig kompliziert ist.

von chris_ (Gast)


Lesenswert?

>Außerdem wird da auch wieder versucht
>irgendwie Eventbasiert die Serielle Schnitstelle auszulesen

Vielleicht weißt Du es ja: Wie kann man das Programm so umschreiben, 
dass das Textfenster ohne Events ohne Zeichenverlust aktualisiert wird?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Für diesen Anwendungsfall würde man wohl Swingworker und das publish 
Verfahren nutzen.
Für eine konkrete Umsetzung müsste man aber erst mal ein paar 
Randbedingungen festlegen, z.B. ob wirklich byteweise irgendwo was 
hingeschrieben werden soll, oder ob ein bestimmter Zeichensatz genutzt 
werden soll und was dann z.B. bei Steuerzeichen passieren soll.
Das geht dann aber etwas am Thema dieses Threads vorbei, wenn es dich 
interessiert solltest du dafür einen eigene Thread eröffnen mit einem 
konkretem Problem und kompilierbarem Beispielcode.

von Sebastian (Gast)


Lesenswert?

nicht“Gast„ schrieb:
> Nimm socat. Da kann alles, was du willst

Ist zwar nicht Plattformunabhängig. Ist aber kein Problem, es muss ja 
nicht auf jeder Plattform das gleiche Programm sein, solange sie das 
gleiche tun.

Hier ist eins für Windows:

http://com0com.cvs.sourceforge.net/viewvc/com0com/com2tcp/ReadMe.txt?revision=RELEASED

von Jim M. (turboj)


Lesenswert?

Tim Taylor schrieb:
> ch habe für ein Projekt die Datenverteilung von mehreren hundert GB
> über UDP Broadcasts im LAN getestet, Fazit aus diesen Tests war das es
> in keinem (!) Fall zu einer Nichteinhaltung der Paketreihenfolge kam.

Dann mach das Ganze mal über WLAN. Da hast Du doppelte Pakete und 
falsche Reihenfolge ohne Ende. BTDT.

von Le X. (lex_91)


Lesenswert?

Jim M. schrieb:
> Dann mach das Ganze mal über WLAN. Da hast Du doppelte Pakete und
> falsche Reihenfolge ohne Ende. BTDT.

Nur aus Interesse:
d.h. bei UDP wär es dann Sache der Applikation, das zu handlen?

von Tim Taylor (Gast)


Lesenswert?

pp schrieb:
> du kannst dich aber nunmal nicht drauf verlassen.... ich hoffe nur das
> du keine wichtigen anwendungen baust.

Eine entsprechende Sicherung wurde im späteren Einsatzzweck noch drüber 
gelegt, es ging bei den Tests erstmal nur um eine 
Abschätzungsmöglichkeit ob weiteres Verfolgen der Idee eines Broadcast 
FTP lohnt.

pp schrieb:
> P.S.: Warum macht man dann keinen Multicast?

Bot für den geplanten Anwendungszweck keine Vorteile und wurde nicht von 
allen Geräten zufriedenstellend umgesetzt.

Jim M. schrieb:
> Dann mach das Ganze mal über WLAN. Da hast Du doppelte Pakete und
> falsche Reihenfolge ohne Ende. BTDT.

Ja, was daran liegt das bei WLAN auch UDP gesichert übertragen wird und 
bei Verlust eben wiederholt. Natürlich blöd wenn in der Zwischenzeit 
schon nachfolgende Pakete durchgekommen sind.

Le X. schrieb:
> Nur aus Interesse:
> d.h. bei UDP wär es dann Sache der Applikation, das zu handlen?

Ja, hier gibts dann aber immer die Abwägung ob nicht doch TCP die 
bessere Idee wäre. Meiner Meinung nach lohnt sich der UDP Ansatz nur, 
wenn man eine Broadcast/Multicast Funktionalität braucht, sehr geringe 
Ressourcen zur Verfügung stehen oder keinen vollständigen IP-Stack zur 
Verfügung hat.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.