Liebe/-r Experte/-in,
bei uns im Labor brauchen wir Socket Listener Programm. Es soll die Daten Werte vom socket lesen. Sie werden zur weitere Bearbeitung in einer Anwendung benutzt werden. Kann ein Experte so ein Programm oder Script erstellen?
Vielen Dank
Sandra
Hallo Sandra,
ja, natürlich, ein solches Programm kann erstellt werden. Allerdings sind Deine Infos viiiiiel zu gering. Erstmal müsste man wissen, wie das Format der Daten ist und wie man den ‚Prompt‘ des Socket-Servers bedient. Sollte es keinen Prompt geben, um Befehle zum Auslesen der Daten abzusetzen, müsste Dein ‚Socket Listener‘ auch ein Server sein, der permanent auf Daten wartet und kann somit kein einfaches Client-Script sein.
Mit Deiner Anforderung solltest Du Dich an eine lokale EDV-Firma wenden oder mal bei gulp.de gucken, ob Du dort jemanden findest, der Dir die Software schreiben kann.
Grüße,
Marc
Hallo Sandra,
es ist eigentlich ein leichtes, so ein Programm zu erstellen. Allerdings ist das ein Projekt für einen Programmierer und der braucht dann noch eine ganze Reihe Angaben:
- welches Betriebssystem (ich vermute Linux?)
- Was für Daten kommen hier, wie oft wird der Socket abgefragt?
- muss das in Echtzeit passieren bzw. hängen zeitkritische Prozesse davon ab?
- wie sollen die Daten aufbereitet werden ?
- existiert eine Programmierschnittstelle zu Ihrem Programm oder werden die Daten nur in einer Datei abgelegt, die dann von Ihrem Programm ausgelesen wird?
- in welcher Sprache soll programmiert werden? Gibt es da Vorgaben?
Das sind nur mal auf die Schnelle ein paar Fragen, die mir dazu einfallen. Machbar ist es auf jeden Fall, nur muss da ein ausführliches Gespräch geführt werden und je nach Aufwand ist die Zeit sowas zu programmieren von ein paar Stunden bis hin zu mehreren Wochen.
Sollten Sie weitere Fragen dazu haben, nur zu
Herzliche Grüße,
Markus.
Hallo Sandra,
ein solches Programm kann ich dir erstellen, allerdings benötige ich mehr Details und könnte dir dann sagen, was es kostet.
Gruß,
Patrick
Bin Netzwerker kein Programmierer; nein nicht mein Job…
Hallo Sandra,
grundsätzlich ist so etwas sicher machbar. Dazu wären aber natürlich weitere Angaben notwendig , sprich so eine Art Spezifikation, die möglichst genau die Daten und Schnittstellen beschreibt. Wie sollen die gelesenen Daten dann weiter verarbeitet werden?
Aus diesen Angaben kann dann Machbarkeit und Aufwand abgeschätzt werden.
Viele Grüße
Holger
Hallo Sandra,
ja, ein Experte kann ganz sicher so ein Skript schreiben, und wahrscheinlich schafft man das auch schon mit relativ geringen Programmierkenntnissen. Mehrere Programme, die Daten von Netzwerkschnittstellen oder angeschlossenen Geräten lesen, habe ich auch schon entwickelt, allerdings nie mit einem einfachen Shell-Skript. Grundsätzlich kann man zwischen irrsinnig vielen Programmiersprachen wählen, die man dafür einsetzen möchte, und für eine der verfügbaren Sprachen muss man sich schon entscheiden
Mit welcher Linux-Distribution arbeitest du denn? SuSE, RedHat, Debian, Ubuntu…? Die Version wäre auch gut zu wissen.
Wie soll das (Mess-)Gerät denn an den PC angeschlossen werden?
Mein Wahl würde sicherlich auf einfaches C oder C++ und Qt 4.x fallen, weil ich auch beruflich mit diesen Sprachen arbeite und es eventuell schon ein fertiges Beispiel irgendwo für genau diesen Fall gibt.
Fast immer wird man die Funktion read (siehe „man 2 read“) benutzen, um Daten von dem „Socket“ oder Filedescriptor zu lesen, nachdem man diesen mit der Funktion open (siehe „man 2 open“) geöffnet hat. Mit read liest man allerding nur einmalig eine bestimmte Menge Daten aus, die gerade vorhanden ist. Dies muss man natürlich in deinem Fall mehrfach wiederholen. Hier hat man die Wahl zwischen zwei Methoden:
-
Eine Schleife, in der immer für eine feste Zeit gewartet wird und dann versucht wird, Daten einzulesen. Dazu würde man die Funktionen sleep und read immer wieder benutzen.
-
Auf ein „Signal“ warten, dass eingehende Daten meldet und dann die Daten einlesen. Dies würde man mit den Funktionen select und read machen.
Bevor ich mir nun aber die Finger wund schreibe, verdaue erstmal diesen Teil und melde dich mit neuen Fragen oder ein paar Antworten zu meinen Fragen. Am besten beides
Bis bald und auf jeden Fall viel Erfolg,
Bernd aka Bart
Hallo Sandra,
hier habe ich ein Beispiel in perl.
Listener:
#!/usr/bin/perl -w
use strict;
use IO::Socket;
Konstruktor der Socket Klasse
my $sock = new IO::Socket::INET(
LocalHost => ‚localhost‘,
LocalPort => 8090,
Proto => ‚tcp‘,
Listen => 1,
Reuse => 1
);
Socket initialisieren oder Fehlermeldung ausgeben
$sock or die „no socket !“;
my($new_sock, $c_addr, $buf);
Socket aufbauen und auf Verbindung warten lassen
while (($new_sock, $c_addr) = $sock->accept()) {
my ($client_port, $c_ip) = sockaddr_in($c_addr);
my $client_ipnum = inet_ntoa($c_ip);
print „got a connection from: $client_ipnum \n“;
Ausgabe des Buffers
while (defined ($buf = )) {
print $buf;
$buf =~/EOF/ && die „closed“;
}
}
Und zum Testen einen Client:
#!/usr/bin/perl -w
use strict;
use IO::Socket;
Einstellungen vom Server
my $host = shift || ‚localhost‘;
my $port = shift || 8090;
Socket konstruieren und initialisieren
my $sock = new IO::Socket::INET(PeerAddr => $host, PeerPort => $port, Proto => ‚tcp‘);
$sock || die „no socket !“;
Alle 10 Sekunden die lokale Zeit an den Server übermitteln
foreach my $i (1…5) {
print $sock „$i „,$host,“\n“," ";
sleep(1);
}
#while (my $buf = ){
#print $sock „$buf \n“;
#}
Socket schließen
close $sock;
Vielleicht hilft dies weiter!
Gruß