Netzwerkserver mit Client TCP-Server

   1 #! /usr/bin/env python
   2 # -*- encoding: latin1 -*-
   3 
   4 # Dieser TCP-Server sendet alle Daten, die er empfängt, an den
   5 # Client als Antwort zurück
   6 
   7 from socket import *
   8 
   9 # Der Standard-Echo-Port ist nicht sehr nützlich, da er root
  10 # Rechte erfordert. Wir nehmen den Port 50007
  11 ECHO_PORT = 50007
  12 BUFSIZE = 1024
  13 
  14 def main():
  15     # TCP-Socket erstellen und an Port binden
  16     s = socket(AF_INET, SOCK_STREAM)
  17     s.bind(('', ECHO_PORT))
  18     s.listen(1)
  19 
  20     print "Server gestartet"
  21 
  22     # Warte auf eine Verbindung zum Server
  23     conn, (remotehost, remoteport) = s.accept()
  24     print 'Verbunden mit %s:%s' % (remotehost, remoteport)
  25 
  26     while 1:
  27         # Empfange daten vom Client
  28         data = conn.recv(BUFSIZE)
  29         print "Echo: %s" % (data)
  30         if not data:
  31             # Die Verbindung wurde getrennt
  32             # Abbruch
  33             break
  34 
  35         # Sende die Daten zurück zum client
  36         conn.send(data)
  37 
  38     # Socket schließen
  39     s.close()
  40 
  41 if __name__ == '__main__':
  42     main()

TCP-Client

   1 #! /usr/bin/env python
   2 # -*- encoding: latin1 -*-
   3 
   4 # Dieser TCP-Client sendet eine Nachricht an einen Server und
   5 # wartet auf eine Antwort.
   6 
   7 from socket import *
   8 
   9 SERVER_PORT = 50007
  10 BUFSIZE = 1024
  11 
  12 def main():
  13     print "Serveradresse: "
  14     host = raw_input()
  15 
  16     print
  17     print "Nachricht: "
  18     msg = raw_input()
  19 
  20     # Ein INet Streaming (TCP/IP) Socket erzeugen
  21     s = socket(AF_INET, SOCK_STREAM)
  22 
  23     # Zum Server verbinden
  24     s.connect((host, SERVER_PORT))
  25 
  26     # Unsere Nachricht senden
  27     s.send(msg)
  28 
  29     # Auf Daten vom Server warten
  30     data = s.recv(BUFSIZE)
  31 
  32     # Daten anzeigen
  33     print
  34     print "Daten: %s" % (data)
  35 
  36     # Socket schließen
  37     s.close()
  38 
  39 if __name__ == '__main__':
  40     main()

UDP-Server

   1 #! /usr/bin/env python
   2 # -*- encoding: latin1 -*-
   3 """
   4       EINFACHER UDP-SERVER
   5       ====================
   6 
   7       Dieser UDP (user datagram protocol) Server ermöglicht
   8       eine verbindungslose Netzwerkkommunikation. Der
   9       Server sendet alle Daten, die er empfängt, an den
  10       Client als Antwort zurück. Durch eine ".stop" Nachricht
  11       kann der Server ordnungsgemäss beendet werden.
  12 
  13 """
  14 
  15 from socket import *
  16 
  17 # Server Port
  18 PORT = 50007
  19 # Maximale Grösse der zu lesenden Daten am Socket
  20 BUFSIZE = 1024
  21 
  22 def main():
  23     # Bindung des Servers an einen UDP-Socket
  24     s = socket(AF_INET, SOCK_DGRAM)
  25     s.bind(("", PORT))
  26     print "UDP-Server gestartet..."
  27 
  28     while 1:
  29         # Lesen der Daten am Socket
  30         data, (client_ip,client_port) = s.recvfrom(BUFSIZE)
  31         # Anzeige der Client-Adresse und der Daten
  32         print "[%s %s]: %s" % (client_ip,client_port,data)
  33         # Reaktion auf Daten
  34         if data == "":
  35            s.sendto("keine Daten",(client_ip,client_port))
  36         elif data == ".stop":
  37            s.sendto("Server beendet",(client_ip,client_port))
  38            break
  39         else:
  40            s.sendto(data,(client_ip,client_port))
  41 
  42 
  43     #Socket schliessen
  44     s.close()
  45 
  46 if __name__ == '__main__':
  47    main()

UDP-Client

   1 #! /usr/bin/env python
   2 # -*- encoding: latin1 -*-
   3 """
   4       EINFACHER UDP-CLIENT
   5       ====================
   6 
   7       Der UDP-Client sendet Daten an den Server, die er als
   8       Antwort wieder empfängt. Durch den ".stop" Befehl wird der
   9       Server ordnungsgemäss beendet. Mit ".quit" wird der
  10       Client beendet.
  11 
  12 """
  13 
  14 from socket import *
  15 
  16 SERVER_IP   = "127.0.0.1"
  17 SERVER_PORT = 50007
  18 CLIENT_PORT = 50008
  19 # Maximale Grösse der zu lesenden Daten am Socket
  20 BUFSIZE = 1024
  21 
  22 def main():
  23     # Bindung des Clients an einen UDP-Socket
  24     s = socket(AF_INET, SOCK_DGRAM)
  25     s.bind(("", CLIENT_PORT))
  26 
  27     while 1:
  28         # Benutzereingabe
  29         msg_out = raw_input("CLI>: ")
  30         if msg_out==".quit":
  31            s.close()
  32            break
  33         # Senden der Daten an den Server
  34         s.sendto(msg_out, (SERVER_IP, SERVER_PORT))
  35         # Lesen der Daten am Socket
  36         msg_in, (client_ip, client_port) = s.recvfrom(BUFSIZE)
  37         print msg_in
  38 
  39 if __name__ == '__main__':
  40    main()

Den Server einfach auf einem PC im Netzwerk starten. Dann den Client starten. Im Client müsst ihr dann die Adresse des Servers eingeben. Wenn ihr Client und Server auf demselben Host ausführt, müsst ihr localhost eingeben.


Entnommen von Einfacher Netzwerkserver und Client.

Tags: Codesnippets | Netzwerk

Netzwerkserver mit Client (zuletzt geändert am 2009-06-17 16:14:13 durch anonym)