<<< Previous topic - Next topic >>> |
|
Author |
Message |
kdw
Joined: 05 May 2006 Posts: 1462
|
Posted: 16.08.2013, 14:32 Post subject: Server in Python … |
|
|
Hallo Forum.
Durch den beachtlichen Funktionsvorrat einer Python-Installation lässt sich schon mit wenigen Codezeilen ein funktionsfähiger TCP-Server erstellen. Hier ein Beispiel:
Code: | import httplib
import socket
import sys
import time
import random
HOST = ''
PORT = 2003
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((HOST, PORT))
s.listen(1)
while 1:
conn, addr = s.accept()
print 'Connected by ', addr
while 1:
data = random.randrange(1000, 2000)
try:
conn.send(str(data))
conn.send(' \r\n')
time.sleep(1)
except socket.error as msg:
print 'Disconnect ...'
break; |
Dieser Server wartet unter dem TCP-Port 2003 auf den Verbindungsaufbau durch einen TCP-Client (zum Testen kann man beispielsweise TeraTerm als Client benutzen).
Solange eine Verbindung besteht, sendet der Server einmal pro Sekunde eine Zufallszahl zwischen 1000 und 2000 als Text an den Client (Tera Term zeigt die Zahl als String an).
Wird die Verbindung durch den Client beendet, wartet der Server für immer auf den nächsten Verbindungsaufbau.
Gruß KDW |
|
Back to top |
|
|
kdw
Joined: 05 May 2006 Posts: 1462
|
Posted: 16.08.2013, 14:52 Post subject: Server per autostart.sh starten … |
|
|
Hallo Forum.
Wenn Sie den zuvor beschrieben Server bei jedem Bootvorgang automatisch starten wollen, gehen Sie bitte wir folgt vor:
1. Schreiben Sie den oben abgebildeten Python-Servercode in eine Textdatei mit dem Namen tcp-push-svr.py und speichern Sie diese Datei im Verzeichnis /flash.
2. Schreiben Sie den hier folgenden Code in eine Textdatei mit dem Namen autostart.sh und speichern Sie diese Datei im Verzeichnis /flash.
Code: | #!/bin/sh
exec 2> /tmp/fehler.txt
exec > /tmp/stdout.txt
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export PATH=$PATH:/usr/local/bin:/usr/local/sbin
export PYTHONPATH=/mnt/lib:/mnt/lib/python27.zip
export PYTHONHOME=/mnt
mount /dev/mtdblock4 /mnt -t jffs2
cd /flash
python tcp-push-svr.py |
3. Vergeben Sie mit chmod +x autostart.sh die entsprechenden Attribute.
4. Starten Sie das IGW/92x erneut.
Das ist alles. Ab sofort wird der weiter oben beschriebene TCP-Server bei jedem Systemstart geladen und wartet unter der Portnummer 2003 auf eingehende Verbindungen.
Gruß KDW |
|
Back to top |
|
|
kdw
Joined: 05 May 2006 Posts: 1462
|
Posted: 17.08.2013, 20:19 Post subject: TCP-Client mit Processing … |
|
|
Hallo Forum.
Mit Hilfe von Processing (http://processing.org/) kann ein TCP-Client für PCs entwickelt werden. Die jeweilige Zufallszahl des weiter oben beschriebenen Python-TCP-Servers wird dann in einem separaten Fenster angezeigt. Hier der Code für Processing:
Code: | import processing.net.*;
Client myClient;
int dataLen;
String data;
PFont myFont;
void setup() {
size(300, 130);
background(#2c223e);
myFont = createFont("System", 48, true);
frameRate(4);
myClient = new Client(this, "192.168.2.146", 2003);
}
void draw() {
data = myClient.readString();
if (data != null) {
dataLen = data.length();
if (dataLen == 4) {
println(data);
background(#2c223e);
fill(#ffffff);
textFont(myFont);
data = data.replace("\r\n", "");
String ndata = "Count: " + data;
text(ndata, 10, height/2+16);
}
}
myClient.clear();
} |
In die Zeile
Code: | myClient = new Client(this, "192.168.2.146", 2003); |
muss die IP-Adresse eingetragen werden, unter der der Python-TCP-Server zu erreichen ist.
Gruß KDW |
|
Back to top |
|
|
kdw
Joined: 05 May 2006 Posts: 1462
|
Posted: 14.09.2014, 08:42 Post subject: HTTP-Server-Template … |
|
|
Hallo Forum.
Das folgende Beispiel zeigt einen kleinen HTTP-Server, der per GET /?Tengine=Wert angesprochen werden muss. Der Query-String wird extrahiert und ‚Wert‘ an eine externe Funktion übergeben:
Code: | import urlparse
from BaseHTTPServer import BaseHTTPRequestHandler
def TengineHandler(value):
print 'Tengine is now ' + value
class MyHandler(BaseHTTPRequestHandler):
def do_GET(s):
parsed_path = urlparse.urlparse(s.path)
querystr = parsed_path.query.split('=')
if querystr[0] == 'Tengine' and len(querystr) == 2:
s.send_response(200)
TengineHandler(querystr[1])
else:
s.send_response(400)
s.end_headers()
if __name__ == '__main__':
from BaseHTTPServer import HTTPServer
server = HTTPServer(('', 8080), MyHandler)
print 'Starting server, use <Ctrl-C> to stop'
server.serve_forever() |
Für den Test dieses Server sollte man cURL benutzen. Ein möglicher Aufruf wäre:
Code: | curl –v http://127.0.0.1:8080/?Tengine=1234 |
Gruß KDW |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|