Websocket wil niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Technisch Ontwerper / Applicatieontwikkelaar max.

ICT Professional Event De komende maanden organiseert CIMSOLUTIONS op diverse locaties in Nederland het ICT Professional Event. Tijdens deze avond kun je naast een hapje en een drankje onze sfeer komen proeven. Maak kennis met CIMSOLUTIONS, onze collega’s en beleef de ervaringen van onze ICT specialisten én de projecten waar zij het verschil maken. Data en locaties Donderdag 27 februari – Groningen Woensdag 4 maart – Best Woensdag 18 maart – Maastricht Donderdag 19 maart – Rotterdam Woensdag 15 april – Deventer Woensdag 27 mei – Amsterdam Woensdag 27 mei – Vianen Kijk voor meer informatie en/of aanmelden op: https://www.cimsolutions.nl/ict-professional-event

Bekijk vacature »

Allround Business Analyst BI

Dümmen Orange is ’s werelds grootste veredelaar en kweker van snijbloemen, bollen, tropische planten, potplanten, perkplanten en vaste planten. Voor onze locatie in De Lier zoeken wij een Allround Business Analist BI. Functie inhoud De BI Omgeving is voor Dümmen Orange van essentieel belang en levert het totaalbeeld over de diverse entiteiten en applicaties. Door zowel acquisities en interne ontwikkelingen wijzigt het interne applicatielandschap regelmatig. Dit heeft direct impact op onze datawarehouse en ook de informatie behoefte waar BI in voorziet waardoor deze continu in beweging is. Als allround business analist BI word je de team-lead van het BI team

Bekijk vacature »

PHP developer gezocht - onderzoek applicatie

Functieomschrijving Je gaat verder ontwikkelen aan de bestaande applicatie en hier nieuwe functionaliteiten op bedenken. Omdat jij verantwoordelijk bent voor de applicatie krijg je hierin ook veel vrijheid. De collega's zijn jonge mensen in de leeftijd van 20 tot ongeveer 40 jaar en er heerst een hele ongedwongen sfeer in het bedrijf. Je mag straks 2 dagen remote vanuit huis werken als je dat zou willen. In overleg is er veel mogelijk bij dit bedrijf. We zoeken iemand met bij voorkeur 2 a 3 jaar ervaring op medior niveau. Heb jij zin om bij een leuk bedrijf verder te ontwikkelen

Bekijk vacature »

LEAD DEVELOPER

Ben jij die developer die meehelpt om ons jonge bedrijf tot een sterk merk uit te bouwen? Je bent niet alleen in staat goed te programmeren maar bent tevens visionair. LEAD WEB DEVELOPER Je bent niet alleen een nerd maar ook een leider die anderen kan begeleiden en motiveren. Je bent niet alleen iemand die aan de eisen van deze functie voldoet maar iemand die op unieke wijze samen met ons een synergie aangaat om nieuwe dingen te doen. Jou profiel Randvoorwaarden zijn er natuurlijk. Je hebt MBO/HBO werk- en denkniveau. Je hebt een aantal jaren relevante werkervaring. Je hebt

Bekijk vacature »

Business Intelligence Developer vacature

Jij ben niet bang om hard te werken. Uitdagingen zijn welkom. En problemen? Die zijn er om opgelost te worden of, nog beter, om voorkomen te worden! Voor jij aan de slag gaat met het ontwerpen van BI- en DWH-oplossingen, leg je eerst je oor te luister bij de klant. Zo weet jij wat de klant wil, en hoe jouw ontwerp eruit moet komen te zien. Simpel! Althans… met jouw Developer-kwaliteiten wel! Over deze BI vacature Als Business Intelligence Developer ga je zowel op locatie bij de klant aan de slag, als op een van de Sogeti-locaties. Je analyseert de

Bekijk vacature »

.Net developer senior

"Ik werk graag bij de Belastingdienst. Het is een complexe omgeving waarin ik met veel plezier werk. Mijn werk doet ertoe voor burgers en bedrijven." Linda Hagendijk - Applicatieontwikkelaar bij de Belastingdienst. Locatie Apeldoorn Functie­omschrijving "Ik werk graag bij de Belastingdienst. Het is een complexe omgeving waarin ik met veel plezier werk. Mijn werk doet ertoe voor burgers en bedrijven." Linda Hagendijk - Applicatieontwikkelaar bij de Belastingdienst. Als .NET-developer voor de directie informatievoorziening werk je vooral voor het toeslagenverstrekkingensysteem. Dit zorgt voor de toekenning en uitbetaling van de zorg-, huur-, en kinderopvangtoeslag en het kindgebondenbudget, waar maar liefst 12 miljoen

Bekijk vacature »

.Net Developer bij maatschappelijk betrokken diens

Voor een financiële particuliere dienstverlener ben ik op zoek naar een ervaren .Net Software Developer. Inmiddels bestaan ze meer dan 130 jaar en werken er 200 medewerkers. Goed werkgeverschap en betrokkenheid staat hoog in het vaandel; je inbreng wordt sterk gewaardeerd en beloond. De winsten vloeien voornamelijk terug naar de medewerkers, klanten en de groei van het bedrijf. Om up to date te blijven met de nieuwste technologieën, zijn ze momenteel de bestaande legacy .Net applicaties naar .Net Core aan het migreren. Ze zijn op zoek naar een collega die met hen ondersteund met zowel het migreren van de bestaande

Bekijk vacature »

Senior Python Developer vacature

Jij volgt ontwikkelingen op de voet. Sterker nog: je bent er onderdeel van. Jij loopt voorop. Jij denkt met klanten mee en helpt hen innoveren. Zo kun jij een bijdrage leveren aan de Rabobank-app, de beveiliging van treinen voor Pro-rail verbeteren of de website van ING een boost geven. Vergaderen? Liever gewoon zorgen dat het werkt! Hoe omschrijft men een Sogetist? Gedreven, resultaatgericht en niet snel tevreden. Wat niet wil zeggen dat je nooit met hem of haar kunt lachen. Integendeel. Plezier hoort wat ons betreft net zo goed bij werken. Maar we gaan op de eerste plaats voor de

Bekijk vacature »

Senior Software Engineer

“Trusted identity verification. Since 1923.” KEESING Technologies is a world leader in ID verification tools. To support our ambitious growth, we are looking for a fulltime (36 hrs/w) Senior Software Engineer The Software Engineer will be contributing to the development and delivery of the backend APIs of our cloud product, developing new features and launching new platforms. A successful candidate will have a proven ability in delivering highly scalable backend applications, a desire to work in a fast paced, Agile software development environment and a passion for building a world class product. The Role: Be responsible for developing and maintaining

Bekijk vacature »

Java Developer Internationaal complexe calculaties

Functieomschrijving Kom jij het best tot je recht in een creatieve omgeving en heb jij een pragmatisch instelling? Denk jij graag vijf stappen vooruit en neem je andere daarin mee? Dan pas je zeker bij dit bedrijf. Lees dus snel verder. Ontwikkelen van applicaties en nieuwe functionaliteiten in Java; Aanpassingen maken in bestaande code; Overleggen en samenwerken met architecten en Product Owners; Werken binnen een multidisciplinair Scrumteam met betrekking tot analyse, design en ontwikkeling; Samenwerken en ondersteunen van testers in het proces van automatische regressietesten. Functie-eisen Je hebt minimaal een afgeronde HBO of WO opleiding in de richting van de

Bekijk vacature »

Front-End Developer / JavaScript / AngularJS / Fin

Functieomschrijving Are you an enthusiastic Front-End Developer? Do you want to work with JavaScript & frameworks like AngularJS and be part of a future migration to Vue.js? Do you have a focus on delivering high quality code that is scalable, readable and clean? If your answers are yes, than this might be your new job! The client designs and develops the next generation of applications. As a Front-End Developer you are, with your team, responsible to speed up and strengthen the digital transformation by designing, implementing and supporting the internet banking applications with main focus on payments solutions. Your focus

Bekijk vacature »

.NET Developer Medicatie / Apotheek

Jij krijgt een kick van het ontwikkelen van complexe software. Voor onze vestiging in Heerenveen zoeken wij een .NET Developer Medicatie / Apotheek die graag met de laatste Microsoft-tools en -technieken wil werken. Interessant? Lees snel verder! Jouw baan Je bent verantwoordelijk voor het ontwerpen, ontwikkelen, ondersteunen en onderhouden van de module Medicatie / Logistiek & Apotheek. Je gaat nauw samen werken met zowel de interne als externe klant om nieuwe functionaliteiten te ontwikkelen om onze klanten te ondersteunen in hun werkproces. Het gaat om complexe ICT-producten die feilloos moeten functioneren binnen de complexe omgeving van een zorgorganisatie. ChipSoft maakt

Bekijk vacature »

Java Developer / Java 8 / Angular / Docker / Autom

Functieomschrijving Wil jij als Java Developer aan de slag bij een internationaal bedrijf die cutting edge applicaties ontwikkeld voor de automotive branche? Ga je graag aan de slag met technieken als Java 8, Java EE7, Docker, Angular en wil je graag direct een lease auto krijgen? Lees dan snel verder! Ontwikkelen van cutting edge applicaties met o.a. Java 8, Java EE7, Angular en Docker; Verantwoordelijk vanaf het in kaart brengen van requirements tot de daadwerkelijke technische oplossing; Meedenken over architectuur; Assisteren van technische implementaties bij klanten; Overleggen met analisten, testers, architecten en consultants. Functie-eisen Minstens 2 jaar ervaring als Java

Bekijk vacature »

Full Stack Java Developer / Maven / Spring /Amster

Functieomschrijving Ben jij een Full Stack Java Developer die in het mooie Amsterdam wil werken, voor een bedrijf dat verantwoordelijk is voor verschillende soorten data en applicaties? Solliciteer dan nu! Ontwikkelen, uitbouwen en verbeteren van applicaties in Java 8; Sparren met de business en jouw SCRUM team aangaande functionaliteiten. Functie-eisen Je bent in het bezit van minimaal een MBO-diploma met HBO werk- en denk niveau; Je hebt ervaring met Java (8); Je hebt ervaring met Maven; Je hebt ervaring met Spring Framework; Je hebt bent bekent met Azure (PaaS/IaaS); Je hebt ervaring met JFS, Angular; Je hebt kennis van Messaging

Bekijk vacature »

Full stack software .NET C# developer, domotica me

Voor een bedrijf in de regio Hendrik Ido Ambacht zijn we op zoek naar een fullstack .NET C#developer. Het gaat hier om een bedrijf dat systemen ontwikkeld die via domotica oplossing bieden voor maatschappelijke instellingen. Zo verwerken hun systemen meldingen waarover ze rapporteren, maar ook zorgen ze voor de automatisering van toezicht. Het systeem bestaat uit apps, web interfaces, backend en BI rapportage tools. Het gaat het hier om een MKB bedrijf van circa 70 mensen met een team van 5 developers. Bestaande uit hardware, embedded en backend developers. Momenteel is er daarom sterke behoefte aan iemand die zowel back-

Bekijk vacature »
Pipo Clown

Pipo Clown

29/12/2013 20:13:59
Quote Anchor link
Ik ben aan het proberen om met websocket te werken maar op de één of andere vage manier wil dit nog niet lukken.

Ik probeer een voorbeeld te volgen vanaf deze pagina :
http://www.sanwebe.com/2013/05/chat-using-websocket-php-socket

Ik heb de bestanden gedownload en, volgens mij, op de juiste wijze aangepast.

index.php :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8' />
<style type="text/css">
<!--
.chat_wrapper {
    width: 500px;
    margin-right: auto;
    margin-left: auto;
    background: #CCCCCC;
    border: 1px solid #999999;
    padding: 10px;
    font: 12px 'lucida grande',tahoma,verdana,arial,sans-serif;
}
.chat_wrapper .message_box {
    background: #FFFFFF;
    height: 150px;
    overflow: auto;
    padding: 10px;
    border: 1px solid #999999;
}
.chat_wrapper .panel input{
    padding: 2px 2px 2px 5px;
}
.system_msg{color: #BDBDBD;font-style: italic;}
.user_name{font-weight:bold;}
.user_message{color: #88B6E0;}
-->
</style>
</head>
<body>    
<?php
$colours
= array('007AFF','FF7000','FF7000','15E25F','CFC700','CFC700','CF1100','CF00BE','F00');
$user_colour = array_rand($colours);
?>


<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>

<script language="javascript" type="text/javascript">  
$(document).ready(function(){
    //create a new WebSocket object.
    var wsUri = "ws://localhost:9000/chattest/server.php";     
    websocket = new WebSocket(wsUri);
    
    websocket.onopen = function(ev) { // connection is open
        $('#message_box').append("<div class=\"system_msg\">Connected!</div>"); //notify user
    }

    $('#send-btn').click(function(){ //use clicks message send button    
        var mymessage = $('#message').val(); //get message text
        var myname = $('#name').val(); //get user name
        
        if(myname == ""){ //empty name?
            alert("Enter your Name please!");
            return;
        }
        if(mymessage == ""){ //emtpy message?
            alert("Enter Some message Please!");
            return;
        }
        
        //prepare json data
        var msg = {
        message: mymessage,
        name: myname,
        color : '<?php echo $colours[$user_colour]; ?>'
        };
        //convert and send data to server
        websocket.send(JSON.stringify(msg));
    });
    
    //#### Message received from server?
    websocket.onmessage = function(ev) {
        var msg = JSON.parse(ev.data); //PHP sends Json data
        var type = msg.type; //message type
        var umsg = msg.message; //message text
        var uname = msg.name; //user name
        var ucolor = msg.color; //color

        if(type == 'usermsg')
        {
            $('#message_box').append("<div><span class=\"user_name\" style=\"color:#"+ucolor+"\">"+uname+"</span> : <span class=\"user_message\">"+umsg+"</span></div>");
        }
        if(type == 'system')
        {
            $('#message_box').append("<div class=\"system_msg\">"+umsg+"</div>");
        }
        
        $('#message').val(''); //reset text
    };
    
    websocket.onerror    = function(ev){$('#message_box').append("<div class=\"system_error\">Error Occurred - "+ev.data+"</div>");};
    websocket.onclose     = function(ev){$('#message_box').append("<div class=\"system_msg\">Connection Closed</div>");};
});
</script>
<div class="chat_wrapper">
<div class="message_box" id="message_box"></div>
<div class="panel">
<input type="text" name="name" id="name" placeholder="Your Name" maxlength="10" style="width:20%"  />
<input type="text" name="message" id="message" placeholder="Message" maxlength="80" style="width:60%" />
<button id="send-btn">Send</button>
</div>
</div>

</body>
</html>


server.php :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
<?php
$host
= 'localhost'; //host
$port = '9000'; //port
$null = NULL; //null var

//Create TCP/IP sream socket

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
//reuseable port
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);

//bind socket to specified host
socket_bind($socket, 0, $port);

//listen to port
socket_listen($socket);

//create & add listning socket to the list
$clients = array($socket);

//start endless loop, so that our script doesn't stop
while (true) {
    //manage multipal connections
    $changed = $clients;
    //returns the socket resources in $changed array
    socket_select($changed, $null, $null, 0, 10);
    
    //check for new socket
    if (in_array($socket, $changed)) {
        $socket_new = socket_accept($socket); //accpet new socket
        $clients[] = $socket_new; //add socket to client array
        
        $header = socket_read($socket_new, 1024); //read data sent by the socket
        perform_handshaking($header, $socket_new, $host, $port); //perform websocket handshake
        
        socket_getpeername($socket_new, $ip); //get ip address of connected socket
        $response = mask(json_encode(array('type'=>'system', 'message'=>$ip.' connected'))); //prepare json data
        send_message($response); //notify all users about new connection
        
        //make room for new socket

        $found_socket = array_search($socket, $changed);
        unset($changed[$found_socket]);
    }

    
    //loop through all connected sockets
    foreach ($changed as $changed_socket) {    
        
        //check for any incomming data
        while(socket_recv($changed_socket, $buf, 1024, 0) >= 1)
        {

            $received_text = unmask($buf); //unmask data
            $tst_msg = json_decode($received_text); //json decode
            $user_name = $tst_msg->name; //sender name
            $user_message = $tst_msg->message; //message text
            $user_color = $tst_msg->color; //color
            
            //prepare data to be sent to client

            $response_text = mask(json_encode(array('type'=>'usermsg', 'name'=>$user_name, 'message'=>$user_message, 'color'=>$user_color)));
            send_message($response_text); //send data
            break 2; //exist this loop
        }
        
        $buf = @socket_read($changed_socket, 1024, PHP_NORMAL_READ);
        if ($buf === false) { // check disconnected client
            // remove client for $clients array

            $found_socket = array_search($changed_socket, $clients);
            socket_getpeername($changed_socket, $ip);
            unset($clients[$found_socket]);
            
            //notify all users about disconnected connection
            $response = mask(json_encode(array('type'=>'system', 'message'=>$ip.' disconnected')));
            send_message($response);
        }
    }
}

// close the listening socket
socket_close($sock);

function
send_message($msg)
{

    global $clients;
    foreach($clients as $changed_socket)
    {
        @
socket_write($changed_socket,$msg,strlen($msg));
    }

    return true;
}



//Unmask incoming framed message
function unmask($text) {
    $length = ord($text[1]) & 127;
    if($length == 126) {
        $masks = substr($text, 4, 4);
        $data = substr($text, 8);
    }

    elseif($length == 127) {
        $masks = substr($text, 10, 4);
        $data = substr($text, 14);
    }

    else {
        $masks = substr($text, 2, 4);
        $data = substr($text, 6);
    }

    $text = "";
    for ($i = 0; $i < strlen($data); ++$i) {
        $text .= $data[$i] ^ $masks[$i%4];
    }

    return $text;
}


//Encode message for transfer to client.
function mask($text)
{

    $b1 = 0x80 | (0x1 & 0x0f);
    $length = strlen($text);
    
    if($length <= 125)
        $header = pack('CC', $b1, $length);
    elseif($length > 125 && $length < 65536)
        $header = pack('CCn', $b1, 126, $length);
    elseif($length >= 65536)
        $header = pack('CCNN', $b1, 127, $length);
    return $header.$text;
}


//handshake new client.
function perform_handshaking($receved_header,$client_conn, $host, $port)
{

    $headers = array();
    $lines = preg_split("/\r\n/", $receved_header);
    foreach($lines as $line)
    {

        $line = chop($line);
        if(preg_match('/\A(\S+): (.*)\z/', $line, $matches))
        {

            $headers[$matches[1]] = $matches[2];
        }
    }


    $secKey = $headers['Sec-WebSocket-Key'];
    $secAccept = base64_encode(pack('H*', sha1($secKey . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')));
    //hand shaking header
    $upgrade  = "HTTP/1.1 101 Web Socket Protocol Handshake\r\n" .
    "Upgrade: websocket\r\n" .
    "Connection: Upgrade\r\n" .
    "WebSocket-Origin: $host\r\n" .
    "WebSocket-Location: ws://$host:$port/chattest/server.php\r\n".
    "Sec-WebSocket-Accept:$secAccept\r\n\r\n";
    socket_write($client_conn,$upgrade,strlen($upgrade));
}

?>


Om de server te starten gebruik ik het volgende php-bestand :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    shell_exec('php -q c:/xampp/htdocs/chattest/server.php 2>&1 > /dev/null &');
?>


Als server draai ik XAMPP onder Windows8-64 bit, hier heb ik onder de directory 'htdocs' een subdirectory 'chattest' aangemaakt waar bovenstaande 3 php bestanden in staan.

Nadat in index.php gestart heb krijg ik de foutmelding 'Error Occurred - undefined'.

Zelf ben ik er vrij zeker van dat het server deel niet opgestart wordt, ik begrijp alleen niet waarom. Wie helpt mij om dit aan de praat te krijgen ?

Alvast bedankt.
Gewijzigd op 29/12/2013 20:23:54 door Pipo Clown
 
PHP hulp

PHP hulp

20/02/2020 03:37:43
 
Christian k

christian k

29/12/2013 21:54:57
Quote Anchor link
Heb je de socket wel geinstalleert?
 
Pipo Clown

Pipo Clown

29/12/2013 22:20:00
Quote Anchor link
Volgens mij wel.

Dit doe ik toch door eenmalig het volgende stukje PHP-code aan te roepen :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    shell_exec('php -q c:/xampp/htdocs/chattest/server.php 2>&1 > /dev/null &');
?>
 
Christian k

christian k

30/12/2013 10:35:03
Quote Anchor link
Ik weet het niet hoe dat met windows werkt maar op ubuntu moest je
Wat comandos in de terminal intypen
 
Pipo Clown

Pipo Clown

31/12/2013 15:30:21
Quote Anchor link
Op mijn localhost heb ik het nu daaiende, dit doordat ik daar de XAMPP-Shell kon gebruiken.

De volgende stap is om het op de NAS aan de praat te krijgen, geen idee hoe ik daar een Shell kan gebruiken.

Ik heb nu onderstaande code welke ik eenmalig aan roep, deze code staat in een php-bestandje dat in dezelfde map staat als server.php en index.php :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
    $result
= exec("php -q ".getcwd()."/server.php 2>&1");
    echo $result;
?>


Het resultaat hiervan is :

"sh: php: command not found"

Wie kan mij vrtellen hoe ik PHP hier bereikbaar krijg ?
 
- Ariën -
Beheerder

- Ariën -

31/12/2013 15:35:19
Quote Anchor link
Kijk eens met phpinfo() waar PHP geinstalleerd is, en gebruik dat path i.p.v. 'php'
 
Pipo Clown

Pipo Clown

31/12/2013 17:26:55
Quote Anchor link
Ik heb ondertussen de volgende code :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
echo getcwd().'/server.php<br><br>';   // Het huidige path

$php_cmd = PHP_BINDIR.'/php';  //  Het path naar PHP
echo $php_cmd;  //  Het path naar PHP

scandir($php_cmd);  //  Inhoud PHP-directory


    $result = exec($php_cmd." -q ".getcwd()."/server.php 2>&1");
echo $result;

?>


Met als resultaat :

/share/MD0_DATA/Web/midlife-info/chat/server.php (Curr-dir)

/root/daily_build/3.8.x/Model/TS-421/../../NasMgmt/HTTP/php5/bin/php (PHP-dir)

Warning: scandir(/root/daily_build/3.8.x/Model/TS-421/../../NasMgmt/HTTP/php5/bin/php) [function.scandir]: failed to open dir: No such file or directory in /share/MD0_DATA/Web/midlife-info/chat/st.php on line 7 (Foutmelding van scandir)

Scandir lijkt uitgevoerd te worden, net als shell_exec, vanuit de current directory en niet vanuit de root waardoor de PHP-dir niet gevonden kan worden.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.