Advertisement
Guest User

Kanaele

a guest
Oct 27th, 2012
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.90 KB | None | 0 0
  1. from socket import *
  2. from os import remove
  3.  
  4. class Kanaele:
  5.   def __init__(self, zielIP, zielport):
  6.     self.__rechnername = gethostname()
  7.     self.__quellIP     = gethostbyname(self.__rechnername)
  8.     self.__quellport   = zielport
  9.     self.__zielIP      = zielIP
  10.     self.__zielport    = zielport
  11.     if self.__zielIP > self.__quellIP:  # Die Quelle ist der Server!
  12.       self.__server  = self.__quellIP
  13.       self.__erster = False
  14.       self.__verbindungssocket = socket(AF_INET,SOCK_STREAM)
  15.       self.__verbindungssocket.bind((self.__rechnername,self.__quellport))
  16.       self.__verbindungssocket.listen(1)
  17.       # print (self.__rechnername, "wartet auf Kontaktaufname ...")
  18.       self.__kommunikationssocket, self.__addr = self.__verbindungssocket.accept()
  19.       # print ("Verbindung zu", self.__zielIP, "hergestellt!")
  20.     elif self.__zielIP < self.__quellIP:   # Das Ziel ist der Server!    
  21.       self.__server = self.__zielIP
  22.       self.__erster = True
  23.       # print ("Es wird versucht, eine Verbindung aufzubauen ...")
  24.       self.__kommunikationssocket = socket (AF_INET, SOCK_STREAM)
  25.       while True: #Warte, bis der Server da ist und die Verbindung zulässt!
  26.         try:
  27.           self.__kommunikationssocket.connect((self.__zielIP, self.__zielport))
  28.           break
  29.         except error:
  30.           pass
  31.       # print ("Verbindung hergestellt zu:", self.__kommunikationssocket.getpeername())
  32.     else:
  33.       # print ("Quellrechner ist mit Zielrechner identisch!")
  34.       # Quellrechner = Zielrechner!
  35.       # Zur Entscheidung wird eine existierende/nichtexistierende Datei
  36.       # herangezogen!
  37.       self.__dateiname = "ServerFuerPort" + str (self.__zielport)
  38.       # print (self.__dateiname)
  39.       try:  
  40.         self.__datei = open(self.__dateiname,"r")
  41.         self.__datei.close()
  42.         #gelungen: Dieses Programm ist der Klient!
  43.         self.__erster = True
  44.         self.__Dateizugriff = True
  45.         self.__server = self.__zielIP
  46.         # print "Es wird versucht, eine Verbindung aufzubauen ..."
  47.         self.__kommunikationssocket = socket (AF_INET, SOCK_STREAM)
  48.         self.__kommunikationssocket.connect((self.__zielIP, self.__zielport))
  49.         # print ("Verbindung hergestellt zu:", self.__kommunikationssocket.getpeername())
  50.       except IOError:
  51.         #Dieses Programm ist der Server!
  52.         # print ("Bin der Server!!")
  53.         self.__erster = False
  54.         self.__Dateizugriff = False
  55.         self.__datei = open(self.__dateiname,"w")
  56.         self.__datei.write("Server läuft!" + "\n")
  57.         self.__datei.close()
  58.         self.__server  = self.__quellIP
  59.         self.__verbindungssocket = socket(AF_INET,SOCK_STREAM)
  60.         self.__verbindungssocket.bind((self.__rechnername,self.__quellport))
  61.         self.__verbindungssocket.listen(1)
  62.         # print (self.__rechnername, "wartet auf Kontaktaufname ...")
  63.         self.__kommunikationssocket, self.__addr = self.__verbindungssocket.accept()
  64.         # print ("Verbindung zu", self.__zielIP, "hergestellt!")
  65.  
  66.   def erster(self):
  67.     return self.__erster
  68.        
  69.   def empfangen(self):
  70.     #Empfange die Anzahl der Pakete, aus der die Nachricht besteht ..
  71.     nachricht = str(self.__kommunikationssocket.recv(1024),encoding='utf8')
  72.     paketanzahl = int (nachricht)
  73.     #Sende Bestätigung ...
  74.     self.__kommunikationssocket.send(b"ACK")
  75.     #Empfange nun die Anzahl an Paketen ...
  76.     nachricht = ""
  77.     for i in range (paketanzahl):
  78.       nachricht = nachricht + str(self.__kommunikationssocket.recv(1024),encoding='utf8')
  79.     #Sende deblockierende Bestätigung ...
  80.     self.__kommunikationssocket.send(b"ACK")
  81.     return nachricht
  82.  
  83.  
  84.   def senden(self,datenstring):
  85.     laenge = len (datenstring)
  86.     paketanzahl = (laenge-1) // 1024 + 1
  87.     #Sende, wie viele Pakete verschickt werden ...
  88.     self.__kommunikationssocket.send(bytes(str(paketanzahl),encoding='utf8'))
  89.     #Warte Bestätigung ab ...
  90.     self.__kommunikationssocket.recv(1024)
  91.  
  92.     #Schicke die Pakete mit jeweils 1024 Byte ...
  93.     gesendet = 0
  94.     while gesendet < laenge:
  95.       if gesendet + 1024 <= laenge:
  96.         self.__kommunikationssocket.send(bytes(datenstring[gesendet:gesendet+1024],encoding='utf8'))
  97.         gesendet = gesendet + 1024
  98.       else:
  99.         self.__kommunikationssocket.send(bytes(datenstring[gesendet:],encoding='utf8'))
  100.         gesendet = laenge
  101.     #Warte auf Bestätigung
  102.     self.__kommunikationssocket.recv(1024)
  103.    
  104.    
  105.   def schliessen(self):
  106.     # print ("Verbindung wird geschlossen ...")
  107.     self.__kommunikationssocket.close()
  108.     if self.__zielIP != self.__quellIP:
  109.       if self.__server == self.__quellIP:
  110.         # print ("Server fährt runter ...")
  111.         self.__verbindungssocket.close()
  112.     else:
  113.       if not self.__Dateizugriff:
  114.         # print ("Server fährt runter ...")
  115.         self.__verbindungssocket.close()
  116.         remove(self.__dateiname)
  117.         # print ("Lock-Datei wurde gelöscht!")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement