Forum: PC Hard- und Software Socket-Software


von Lars (Gast)


Lesenswert?

Hallo zusammen.

ich habe ein kleines Projekt im Studium erhalten, ein Programm zu 
schreiben, welches einen Socket erstellt und über einen String an das 
verbundene Gerät (IP/Port) schickt.

Nun möchte ich das Ganze mal ausprobieren. Leider finde ich kein 
Programm, mit dem man sehen kann, ob meine programmierte Software nun 
auch richtig den Socket/die Verbindung aufbaut bzw. ob der String auch 
entsprechend rausgeschickt wird.
Außerdem möchte ich, dass ich einen Response an meine Software schicken 
kann, damit ich sehe, wie diese reagiert.

Wisst ihr was ich meine?

Gibt es da so etwas wie ein "Terminal" für COM-Schnittstellen, nur eben 
auf Netzwerkbasis?


Vielen Dank!

von Anon (Gast)


Lesenswert?

telnet

von Udo S. (urschmitt)


Lesenswert?

Lars schrieb:
> Leider finde ich kein
> Programm, mit dem man sehen kann, ob meine programmierte Software nun
> auch richtig den Socket/die Verbindung aufbaut bzw. ob der String auch
> entsprechend rausgeschickt wird.

Das verstehe ich nicht. Entweder du musst in dem Projekt nur den Client 
schreiben, dann gibt es schon das entsprechende Serverprogramm, also 
benutze das.
Oder du sollst beide Programme erstellen dann mach das doch einfach.

Eine Suche nach "socket programmierung" fördert hunderte Treffer auch zu 
Programmbeispielen.
Hier z.B. für Windows nach 5sekunden Suche:
http://www.c-worker.ch/tuts/wstut_op.php

: Bearbeitet durch User
von wg (Gast)


Lesenswert?

Hallo

wenn's mit Oberfläche sein soll

putty
http://www.putty.org/

von Sven (Gast)


Lesenswert?


von Sven (Gast)


Lesenswert?

Sry meinte noch das beim 2. link.

http://wiki.ubuntuusers.de/Wireshark

von Lars (Gast)


Lesenswert?

Hallo Leute!

Mein geschriebenes Programm ist die Client-Seite. Dort gebe ich IP und 
Port ein, um sich dann an ein Messgerät zu verbinden. Dieses Messgerät 
liefert auf eine entsprechende Anfrage eine Rückantwort.
Da ich dieses Gerät leider nicht zuhause zum testen habe, brauche ich 
eben etwas, was dieses Messgerät "simuliert".

Das heißt:

Ich schicke mit meinem Programm eine Anfrage raus ans Messgerät, 
daraufhin antwortet das Messgerät und mein Programm wertet die Antwort 
aus.

Kann WireShark und Co. das?

Danke!

von Anon (Gast)


Lesenswert?

Lars schrieb:
> Kann WireShark und Co. das?

nein, aber nichts hindert dich daran, einen primitiven Server selbst zu 
schreiben, z.B. mit perl:
1
 #!/usr/bin/perl -w
2
3
 use IO::Socket;
4
 use Net::hostent;              
5
 $PORT = 5000;                  
6
 $server = IO::Socket::INET->new(Proto => 'tcp', LocalPort => $PORT, Listen => SOMAXCONN, Reuse => 1);
7
 die "wtf" unless $server;
8
 while ($client = $server->accept()) {
9
   $client->autoflush(1);
10
   print $client "Willkommen am simulierten Messgeraet";
11
   while (<$client>) {
12
     next unless /\S/;
13
     if (/befehl/i){ 
14
        //machwas  
15
     }
16
   } continue {
17
      print $client "#> ";
18
   }
19
   close $client;
20
 }

von Lars (Gast)


Lesenswert?

Zwar eine nette Idee...aber nicht wirklich hilfreich. Woher weiß ich ob 
dann das "Server-"Programm fehlerfrei funktioniert.

Gibts da nichts in der Linux-Welt, womit man einfach einen Befehl auf 
die eth0 rausschicken kann?!

von Anon (Gast)


Lesenswert?

Lars schrieb:
> Zwar eine nette Idee...aber nicht wirklich hilfreich. Woher weiß ich ob
> dann das "Server-"Programm fehlerfrei funktioniert.
1
anon@linuxkiste:~$ cat testserver.pl
2
#!/usr/bin/perl -w
3
4
use IO::Socket;
5
use Net::hostent;
6
$PORT = 5000;
7
$server = IO::Socket::INET->new(Proto => 'tcp', LocalPort => $PORT, Listen => SOMAXCONN, Reuse => 1);
8
die "wtf" unless $server;
9
while ($client = $server->accept()) {
10
  $client->autoflush(1);
11
  print $client "Willkommen am simulierten Messgeraet";
12
  while (<$client>) {
13
    next unless /\S/;
14
    if (/quit/i){
15
        last;
16
    }
17
  } continue {
18
     print $client "#> ";
19
  }
20
  close $client;
21
}
22
anon@linuxkiste:~$ ./testserver.pl &
23
[1] 26402
24
anon@linuxkiste:~$ telnet localhost 5000
25
Trying 127.0.0.1...
26
Connected to localhost.
27
Escape character is '^]'.
28
Willkommen am simulierten Messgeraet
29
#> quit
30
Connection closed by foreign host.
31
anon@linuxkiste:~$

von derguteweka (Gast)


Lesenswert?

Lars schrieb:
> Gibts da nichts in der Linux-Welt, womit man einfach einen Befehl auf
> die eth0 rausschicken kann?!

netcat koennt' dir vielleicht weiterhelfen.

Gruss
WK

von Lars (Gast)


Lesenswert?

Manchmal frage ich mich schon, warum alles so umständlich ist.
Das ist doch eine Problemstellung, die es täglich gibt, und noch immer 
muss man sich sein Zeug selbst programmieren...

von Udo S. (urschmitt)


Lesenswert?

Lars schrieb:
> Manchmal frage ich mich schon, warum alles so umständlich ist.
> Das ist doch eine Problemstellung, die es täglich gibt, und noch immer
> muss man sich sein Zeug selbst programmieren...

Du hast völlig recht, absolut unnötig, am Ende lernst du noch was durch 
das selbst programmieren. Echt ätzend.
:-)

von Lars (Gast)


Lesenswert?

Ich sage nicht, dass es unnötig ist oder ätzend, aber wenn man schnell 
ein Ergebnis möchte, muss man sich erst selbst verzetteln...das nervt.

Aber gut zu wissen, dass es sowas noch nicht gibt, vielleicht werde ich 
bald reich. ;)

von Olaf D. (Firma: O.D.I.S.) (dreyero)


Lesenswert?

Es gibt sowas wie (fast) wie Sand am Meer:
CANoe (Windows, teuer), odisLogger (Windows + Linux, preiswert für 
privat, Demolizenz möglich)) um nur zwei zu nennen.

Gruß

Olaf

PS: Zweiteres ist von mir und ich brauche noch Tester :-)

von Klaus W. (mfgkw)


Lesenswert?

derguteweka schrieb:
> netcat koennt' dir vielleicht weiterhelfen.

Genau das ist das Mittel der Wahl.
Findet sich nur kaum in den vielen Antworten.

von Olaf D. (Firma: O.D.I.S.) (dreyero)


Lesenswert?

Klaus Wachtler schrieb:
> derguteweka schrieb:
>> netcat koennt' dir vielleicht weiterhelfen.
>
> Genau das ist das Mittel der Wahl.
> Findet sich nur kaum in den vielen Antworten.

Das ist nicht das Mittel der Wahl, weil er ein Protokoll programmieren 
muss.
Netcat kann das zwar an andere Programme weiterleiten, das wird aber 
schmerzhaft, weil sich netcat immer wieder beendet wenn die Verbindung 
geschlossen wird.

Gruß

Olaf

von nicht"Gast" (Gast)


Lesenswert?

Olaf Dreyer schrieb:
> Klaus Wachtler schrieb:
>> derguteweka schrieb:
>>> netcat koennt' dir vielleicht weiterhelfen.
>>
>> Genau das ist das Mittel der Wahl.
>> Findet sich nur kaum in den vielen Antworten.
>
> Das ist nicht das Mittel der Wahl, weil er ein Protokoll programmieren
> muss.
> Netcat kann das zwar an andere Programme weiterleiten, das wird aber
> schmerzhaft, weil sich netcat immer wieder beendet wenn die Verbindung
> geschlossen wird.
>
> Gruß
>
> Olaf

Na ja, ganz so schlimm ist das ja noch nicht. Der TE möchte ja erst mal 
nur mit Sockets rumspielen.

@TE programmiere dir doch die andere Seite selber. Da lernst du auch 
noch was dabei. Sockets sind ja keine Einbahnstraße.

Alternativ eine kleine Liste:

Realterm
Putty
netcat
telnet
socat

Die können sich alle auf einen Server verbinden. Da muss doch was dabei 
sein für dich.

von Udo S. (urschmitt)


Lesenswert?

Klaus Wachtler schrieb:
> Genau das ist das Mittel der Wahl.

Und wie machst du das, das Netcad sich als Server installiert und bei 
einem Request des zu testenden Clients diesem z.B. ein Magic Word 
zusendet, dann auf Daten des Clients wartet und -abhängig von diesen 
Daten- dann eine passende Antwort gibt?
Und das alles in einer Verbindung.

von Olaf D. (Firma: O.D.I.S.) (dreyero)


Lesenswert?

Udo Schmitt schrieb:
> Klaus Wachtler schrieb:
>> Genau das ist das Mittel der Wahl.
>
> Und wie machst du das, das Netcad sich als Server installiert und bei
> einem Request des zu testenden Clients diesem z.B. ein Magic Word
> zusendet, dann auf Daten des Clients wartet und -abhängig von diesen
> Daten- dann eine passende Antwort gibt?
> Und das alles in einer Verbindung.

Ich sag ja, mit netcat wird das wehtun.

von Lars (Gast)


Lesenswert?

So...ich habe dankend das Perl-Skript ausgeführt, jetzt habe ich aber 
schon Java-Seitig ein Problem:

Laut diesem Code soll er die Antwort des Perl-Programms doch eigentlich 
in der Konsole ausgeben...tut er aber leider nicht. :(
Die Anzahl der Bytes stimmen.

Wisst ihr, woran das liegen kann, dass er zwar die Anzahl der 
empfangenen Bytes anzeigt, aber nicht die Daten selbst?
1
import java.io.BufferedReader;
2
import java.io.IOException;
3
import java.io.InputStream;
4
import java.io.InputStreamReader;
5
import java.io.OutputStream;
6
import java.io.PrintStream;
7
import java.net.Socket;
8
import java.net.UnknownHostException;
9
10
class StringClient {
11
12
    public static void main(String[] args) {
13
        Socket socket = null;
14
        try {
15
            socket = new Socket("localhost", 3141);
16
17
            OutputStream raus = socket.getOutputStream();
18
            PrintStream ps = new PrintStream(raus, true);
19
            ps.println("Hallo Welt!");
20
            ps.println("Hallo Otto!");
21
22
            InputStream rein = socket.getInputStream();
23
            System.out.println("verf\u00FCgbare Bytes: " + rein.available());
24
            BufferedReader buff = new BufferedReader(new InputStreamReader(rein));
25
            
26
            while (buff.ready()) {
27
                System.out.println(buff.readLine());
28
            }
29
30
        } catch (UnknownHostException e) {
31
            System.out.println("Unknown Host...");
32
            e.printStackTrace();
33
        } catch (IOException e) {
34
            System.out.println("IOProbleme...");
35
            e.printStackTrace();
36
        } finally {
37
            if (socket != null)
38
                try {
39
                    socket.close();
40
                    System.out.println("Socket geschlossen...");
41
                } catch (IOException e) {
42
                    System.out.println("Socket nicht zu schliessen...");
43
                    e.printStackTrace();
44
                }
45
        }
46
    }
47
}
Gruß

von nicht"Gast" (Gast)


Lesenswert?

Udo Schmitt schrieb:
> Und wie machst du das, das Netcad sich als Server installiert und bei
> einem Request des zu testenden Clients diesem z.B. ein Magic Word
> zusendet, dann auf Daten des Clients wartet und -abhängig von diesen
> Daten- dann eine passende Antwort gibt?
> Und das alles in einer Verbindung.

warum klingt das bei dir kompliziert?

'nc -l -p 3333' startet den Server. Die Anfrage siehst du im Klartext 
auf deiner Konsole. Dann kannst du vorbereitete Antworten per copy/paste 
zurück schicken und schauen, wie dein Programm reagiert.

Ist jetzt nicht wirklich schwer oder?

von Jay (Gast)


Lesenswert?

nicht"Gast" schrieb:
> Dann kannst du vorbereitete Antworten per copy/paste
> zurück schicken und schauen, wie dein Programm reagiert.
>
> Ist jetzt nicht wirklich schwer oder?

Aber nicht lustig, wenn man das zum Testen x-Mal in der Stunde machen 
muss. Es ist das typische Gefummel bei dem sich manche Programmierer 
einreden, sie wären extrem produktiv, weil sie ständig rumwuseln.

von Apple User (Gast)


Lesenswert?

Such nach hwgroup und Hercules.

von Klaus W. (mfgkw)


Lesenswert?

Jay schrieb:
> nicht"Gast" schrieb:
>> Dann kannst du vorbereitete Antworten per copy/paste
>> zurück schicken und schauen, wie dein Programm reagiert.
>>
>> Ist jetzt nicht wirklich schwer oder?
>
> Aber nicht lustig, wenn man das zum Testen x-Mal in der Stunde machen
> muss. Es ist das typische Gefummel bei dem sich manche Programmierer
> einreden, sie wären extrem produktiv, weil sie ständig rumwuseln.

Also im OT steht, daß er ein selbgebautes Programm hat und testweise die 
Gegenseite simulieren will.

Genau dafür ist netcat ideal.

Daß man das nicht als Dauertest stundenlang machen will, ist doch gar 
nicht gefragt.

von Udo S. (urschmitt)


Lesenswert?

nicht"Gast" schrieb:
> warum klingt das bei dir kompliziert?

Weil ich netcad nicht kenne.
Ich gehe also jetzt davon aus, dass netcad kein Konsolenprogramm ist das 
sich von selbst beendet, sondern dass es ähnlich wie ftp eine eigene 
Konsole öffnet und offen hält, in der man weitere Kommandos eingeben 
kann.

Danke, wieder was gelernt.

von hmm... (Gast)


Lesenswert?

Wenns nur Strings sein sollen reichen Linux Boardmittel. netcat zum 
senden und empfangen von Strings und tcpdump um zu sehen was über die 
Leitung geht. Wenn du etwas zum Klicken brauchst, kannst du statt 
tcpdump natürlich auch wireshark nehmen.

von R. W. (Gast)


Angehängte Dateien:

Lesenswert?

Lars schrieb:
>
> Nun möchte ich das Ganze mal ausprobieren. Leider finde ich kein
> Programm, mit dem man sehen kann, ob meine programmierte Software nun
> auch richtig den Socket/die Verbindung aufbaut bzw. ob der String auch
> entsprechend rausgeschickt wird.

Du schreibst nicht für was : windows/linux
daher hier mal ein kleiner win server
einfach entpacken und starten, es wird nichts installiert, keine 
registry oder sonswas verändert.

entfernen kannst ihn dann idem du ihn einfach wieder löscht.

Deine CLient Message 'string'  steht dann im 'Incomming' Fenster drin


> Außerdem möchte ich, dass ich einen Response an meine Software schicken
> kann, damit ich sehe, wie diese reagiert.

Schreibst du in 'Server Response' rein

>
> Wisst ihr was ich meine?

Hoffe es :)

anbei ein kleiner Test Server
wenn du HEX, BIN oder andere Anzeigen auch brauchst musst dich etwas 
gedulden, hatte nur paar minuten zeit.

Port einstellen, Server Active setzen,
dein client auf die IP + Port setzen,
connecten, senden und kontrollieren ob alles durchläuft.
Feedback wäre nett, auch Verbesserungsvorschlag.
Ist einfach gehalten, also richtige Portnummer angeben
dann erst Server active setzen..

lg
rudi :)

von Klaus W. (mfgkw)


Lesenswert?

Udo Schmitt schrieb:
> netcad

Das kenne ich auch nicht.
Aber netcat :-)
Das ist wiederum ein Konsolenprogramm (lief mir auch schon mit dem 
aussagekräftigen Namen nc über den Weg).

von Udo S. (urschmitt)


Lesenswert?

Klaus Wachtler schrieb:
> Udo Schmitt schrieb:
>> netcad
>
> Das kenne ich auch nicht.
> Aber netcat :-)

gmml

Klaus Wachtler schrieb:
> (lief mir auch schon mit dem
> aussagekräftigen Namen nc über den Weg).

aka 'not connected'?
Passt irgendwie :-)

von R. W. (Gast)


Lesenswert?

Lars schrieb:

> Wisst ihr, woran das liegen kann, dass er zwar die Anzahl der
> empfangenen Bytes anzeigt, aber nicht die Daten selbst?

bin mir nicht ganz sicher
aber probiere mal:

anstatt
>
1
> 
2
>             while (buff.ready()) {
3
>             System.out.println(buff.readLine());
4
>             }
5
>

mit dem

>
1
> 
2
>             while (buff.ready()) {
3
>             System.out.println(buff.nextLine() );
4
>             }
5
>

lg

von A. H. (ah8)


Lesenswert?

Es gibt eigentlich auf jedem netzwerkfähigen Unix-/Linuxserver eine 
echo Service. Die Port-Nummer habe ich gerade nicht zur Hand, steht 
aber in der /etc/services. Kann sein, dass der heute aus 
Sicherheitsgründen standardmäßig disabled ist, dann musst Du ihn erst 
freischalten. Dieser Dienst gibt einfach alles, was ihm geschickt wird, 
unverändert an den Client zurück. Also einfach bei einem Server Deiner 
Wahl auf diesen Port verbinden, String senden und Antwort einlesen. Wenn 
es exakt der gleiche String ist sollte Deine Verbindung funktionieren.

: Bearbeitet durch User
von fbi (Gast)


Lesenswert?

A. H. schrieb:
> Es gibt eigentlich auf jedem netzwerkfähigen Unix-/Linuxserver eine
> echo Service.

Den gibt es auch auf jedem Windows, wird nur normalerweise nicht mit 
installiert. Zu finden in den "Windows features" als "Simple TCPIP 
services"

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.