TOP
SSV Software Systems Register  Register
Log in to check your private messages  Log in to check your private messages
Startseite FAQ Search Mitglieder Profile  Log in 
SSV Support-Forum
Server in Python …

 
Post new topic   Reply to topic    SSV-Forum Forum Index >>> IGW/922
<<< Previous topic - Next topic >>>  
Display posts from previous:   
Author Message
kdw



Joined: 05 May 2006
Posts: 1460

PostPosted: 16.08.2013, 14:26    Post subject: Server in Python … Reply with quote

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 dann 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
View user's profile Send private message
kdw



Joined: 05 May 2006
Posts: 1460

PostPosted: 16.08.2013, 15:01    Post subject: Server per autostart.sh starten … Reply with quote

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
View user's profile Send private message
kdw



Joined: 05 May 2006
Posts: 1460

PostPosted: 17.08.2013, 20:15    Post subject: TCP-Client mit Processing … Reply with quote

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
View user's profile Send private message
kdw



Joined: 05 May 2006
Posts: 1460

PostPosted: 14.09.2014, 08:38    Post subject: HTTP-Server-Template … Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    SSV-Forum Forum Index >>> IGW/922 All times are GMT + 1 Hour
Page 1 of 1

 
Jump to:  
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

SSV Software Systems GmbH

Dünenweg 5
30419 Hannover

Fon: +49(0)511  ·  40 000-0
Fax: +49(0)511  ·  40 000-40

sales@ssv-embedded.de


Impressum    ·    Datenschutz    ·    AGB

© 2023 SSV SOFTWARE SYSTEMS GmbH. Alle Rechte vorbehalten.

ISO 9001:2015