Thread SSL Server im Hintergrund des Scripts (9 answers)
Opened by YAPD at 2016-03-09 15:47

YAPD
 2016-03-09 15:47
#184120 #184120
User since
2015-09-20
146 Artikel
BenutzerIn

user image
Guten Tag Zusammen,

ich hänge zur Zeit bei der Programmierung mit dem Module
IO::Socket:SSL schon länger an einem Problem, das ich
einfach nicht in den Griff bekomme.

Und zwar habe ich einen einfachen SSL Server, der Anfragen
eines Clients beantwortet und dann eine entsprechende
Rückmeldung an den Client gibt.

Der Code sieht folgendermaßen aus :

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# SSL - Server

my $SSL_Server = IO::Socket::SSL -> new(

# Initialisierung der Server - Adresse & des Ports

LocalAddr => '127.0.0.1' ,
LocalPort => 8000 ,
Listen => 10 ,

# Zertifikate für die Authentifizierung

SSL_cert_file => 'D:\PERL\Programmierung\Server\Certs\ca-root.pem',
SSL_key_file => 'D:\PERL\Programmierung\Server\Certs\ca-key.pem',

) or die "failed to listen: $!";

# -----------------------------------------------------------------------------

# Akzeptiere Clients

while( 1 )
{
# Warte auf neue Verbindung

my $Akzeptierung_Verbindung_Clients = $SSL_Server -> accept or die
"Fehler bei der Akzeptierung des Handshakes : !";

# get information about a newly connected client

my $client_address = $Akzeptierung_Verbindung_Clients -> peerhost();
my $client_port = $Akzeptierung_Verbindung_Clients -> peerport();

print "Eingehende Verbindung : $client_address:$client_port" , "\n";

# read up to 1024 characters from the connected client

my $data = "";
$Akzeptierung_Verbindung_Clients -> read( $data , 1024 );

my @Pruefung_Lizenzierung = split( / , / , $data );

print "Ausgabe : $Pruefung_Lizenzierung[ 0 ]" , "\n";
print "Ausgabe : $Pruefung_Lizenzierung[ 1 ]" , "\n";
print "Ausgabe : $Pruefung_Lizenzierung[ 2 ]" , "\n";

my $Server_Rueckmeldung = "OK";
$Akzeptierung_Verbindung_Clients -> print( $Server_Rueckmeldung );

# notify client that response has been sent

shutdown( $Akzeptierung_Verbindung_Clients , 1 );
}

$SSL_Server -> close( );


Der Code ist so OK. Er macht jedenfalls das, was ich vorhatte. Für
Veränderungsvorschläge bin ich natürlich immer offen. :-)

Nun komme ich zu meinem eigentlichen Problem :

Ich habe eine Oberfläche, genauer gesagt ein Systay Icon ( Modul Win32::GUI )
über dessen Menupunkte ich den SSL Server aufrufen möchte.

Wenn ich auf den Menupunkt klicke, wird der Teil des SSL Servers
ausgeführt, also die Sub - Routine, allerdings STOPPT dann das Systray
Icon und bei einem Rechtsklick erscheint das Menu nicht mehr.

Ich weiss, dass es damit zu tun hat, dass während die while Schleife
ausgeführt wird, das "Hauptprogramm" sozusagen wartet, bis die
Schleife beendet wird. Dies ist allerdings ja nie der Fall, da
der SSL Server immer auf neue Client Verbindungen wartet.

Ich habe bereits versucht, es als Modul einzubinden, also als pm.
Ebenfalls habe ich verschiedene Beiträge über parallel laufende
Sub - Routinen gefunden, die allerdings nichts brachten, wie z. B. :

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/perl

use threads;
use threads::shared;

$|=1;

my ($global) : shared ;

my $thr1 = threads->new(\&TEST,1) ;
my $thr2 = threads->new(\&TEST,2) ;

my @ReturnData = $thr1->join ;
print "Thread 1 returned: @ReturnData\n" ;

my @ReturnData = $thr2->join ;
print "Thread 2 returned: @ReturnData\n" ;

sub TEST {
my ( $id ) = @_ ;

for(0..10) {
$global++ ;
print "id: $id >> $_ >> GLB: $global\n" ;
sleep(1) ;
}

return( $id ) ;
}


Ich hoffe ihr versteht, was ich meine & dass ihr
vielleicht einen Tipp für mich habt, wie ich das
bewerkstelligen kann.

Vielen Dank im Voraus !

Viele Grüße
YAPD
Last edited: 2016-03-09 16:20:17 +0100 (CET)
Yet Another Perl Developer

View full thread SSL Server im Hintergrund des Scripts