Ik ben bezig met enkele scripts te maken. De bedoeling is dat er een netcat server runt die een script uitvoerd. Een client die verbinding maakt (moet een Java client worden) geeft iets door en krijgt wat terug.
Het script van de eigenlijke server:
De server doorloopt dus een oneindige lus om te luisteren naar binnenkomende clients. Daarbij voert hij het script ncServerScript.sh uit.
In ncServerScript.sh staat hetvolgende:
Om te beginnen is er een variabele die de datum en tijd bevat (bvb 29-01-07--16:20:45). Vervolgens wordt de input van de verbonden client uitgelezen. Die client input wordt samen met datum en tijd naar een logje weggeschreven.
Nu moet de server dus "Hallo client" echo'en wanneer hij "halloserver" inleest van een client. Anders geeft hij "onbekende client" terug.
Het probleem is nu als volgt:
bij het verbinden via telnet wordt altijd het else gedeelte uitgevoerd, zelfs als ik "halloserver" meegeef bij telnet. Dit wordt gelogt, dus er is geen sprake van een typefout.
Start ik echter een 2de netcat sessie als volgt:
Dan wordt wel het if gedeelte van de controlle structuur uitgevoerd.
Om dat te bewijzen het logje:
De eerste keer werd er met telnet verbonden en werd het if statement niet uitgevoerd, de 2de keer verbind ik via netcat en wordt die wèl uitgevoerd.
Het is voor mij een raadsel in elk geval.. Iemand een idee?
Het script van de eigenlijke server:
code:
1
2
3
4
| #!/bin/bash
while(true) do
nc -l -p 1234 -e ncServerScript.sh
done |
De server doorloopt dus een oneindige lus om te luisteren naar binnenkomende clients. Daarbij voert hij het script ncServerScript.sh uit.
In ncServerScript.sh staat hetvolgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
| #!/bin/bash
datum=`date +%d-%m-%y--%H:%M:%S`
read clientInput
echo "$datum Client stuurde: '$clientInput'" >> nclog.txt
if (test "$clientInput" = "halloserver") then
echo "$datum Server gaat in test lus..." >> nclog.txt
echo Hallo client
else
echo Onbekende client
fi |
Om te beginnen is er een variabele die de datum en tijd bevat (bvb 29-01-07--16:20:45). Vervolgens wordt de input van de verbonden client uitgelezen. Die client input wordt samen met datum en tijd naar een logje weggeschreven.
Nu moet de server dus "Hallo client" echo'en wanneer hij "halloserver" inleest van een client. Anders geeft hij "onbekende client" terug.
Het probleem is nu als volgt:
bij het verbinden via telnet wordt altijd het else gedeelte uitgevoerd, zelfs als ik "halloserver" meegeef bij telnet. Dit wordt gelogt, dus er is geen sprake van een typefout.
Start ik echter een 2de netcat sessie als volgt:
code:
1
| echo "halloserver" | nc 127.0.0.1 1234 |
Dan wordt wel het if gedeelte van de controlle structuur uitgevoerd.
Om dat te bewijzen het logje:
code:
1
2
3
| 29-01-07--16:20:38 Client stuurde: 'halloserver' 29-01-07--16:20:45 Client stuurde: 'halloserver' 29-01-07--16:20:45 Server gaat in test lus... |
De eerste keer werd er met telnet verbonden en werd het if statement niet uitgevoerd, de 2de keer verbind ik via netcat en wordt die wèl uitgevoerd.
Het is voor mij een raadsel in elk geval.. Iemand een idee?