Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from socket import *
- from os import remove
- class Kanaele:
- def __init__(self, zielIP, zielport):
- self.__rechnername = gethostname()
- self.__quellIP = gethostbyname(self.__rechnername)
- self.__quellport = zielport
- self.__zielIP = zielIP
- self.__zielport = zielport
- if self.__zielIP > self.__quellIP: # Die Quelle ist der Server!
- self.__server = self.__quellIP
- self.__erster = False
- self.__verbindungssocket = socket(AF_INET,SOCK_STREAM)
- self.__verbindungssocket.bind((self.__rechnername,self.__quellport))
- self.__verbindungssocket.listen(1)
- # print (self.__rechnername, "wartet auf Kontaktaufname ...")
- self.__kommunikationssocket, self.__addr = self.__verbindungssocket.accept()
- # print ("Verbindung zu", self.__zielIP, "hergestellt!")
- elif self.__zielIP < self.__quellIP: # Das Ziel ist der Server!
- self.__server = self.__zielIP
- self.__erster = True
- # print ("Es wird versucht, eine Verbindung aufzubauen ...")
- self.__kommunikationssocket = socket (AF_INET, SOCK_STREAM)
- while True: #Warte, bis der Server da ist und die Verbindung zulässt!
- try:
- self.__kommunikationssocket.connect((self.__zielIP, self.__zielport))
- break
- except error:
- pass
- # print ("Verbindung hergestellt zu:", self.__kommunikationssocket.getpeername())
- else:
- # print ("Quellrechner ist mit Zielrechner identisch!")
- # Quellrechner = Zielrechner!
- # Zur Entscheidung wird eine existierende/nichtexistierende Datei
- # herangezogen!
- self.__dateiname = "ServerFuerPort" + str (self.__zielport)
- # print (self.__dateiname)
- try:
- self.__datei = open(self.__dateiname,"r")
- self.__datei.close()
- #gelungen: Dieses Programm ist der Klient!
- self.__erster = True
- self.__Dateizugriff = True
- self.__server = self.__zielIP
- # print "Es wird versucht, eine Verbindung aufzubauen ..."
- self.__kommunikationssocket = socket (AF_INET, SOCK_STREAM)
- self.__kommunikationssocket.connect((self.__zielIP, self.__zielport))
- # print ("Verbindung hergestellt zu:", self.__kommunikationssocket.getpeername())
- except IOError:
- #Dieses Programm ist der Server!
- # print ("Bin der Server!!")
- self.__erster = False
- self.__Dateizugriff = False
- self.__datei = open(self.__dateiname,"w")
- self.__datei.write("Server läuft!" + "\n")
- self.__datei.close()
- self.__server = self.__quellIP
- self.__verbindungssocket = socket(AF_INET,SOCK_STREAM)
- self.__verbindungssocket.bind((self.__rechnername,self.__quellport))
- self.__verbindungssocket.listen(1)
- # print (self.__rechnername, "wartet auf Kontaktaufname ...")
- self.__kommunikationssocket, self.__addr = self.__verbindungssocket.accept()
- # print ("Verbindung zu", self.__zielIP, "hergestellt!")
- def erster(self):
- return self.__erster
- def empfangen(self):
- #Empfange die Anzahl der Pakete, aus der die Nachricht besteht ..
- nachricht = str(self.__kommunikationssocket.recv(1024),encoding='utf8')
- paketanzahl = int (nachricht)
- #Sende Bestätigung ...
- self.__kommunikationssocket.send(b"ACK")
- #Empfange nun die Anzahl an Paketen ...
- nachricht = ""
- for i in range (paketanzahl):
- nachricht = nachricht + str(self.__kommunikationssocket.recv(1024),encoding='utf8')
- #Sende deblockierende Bestätigung ...
- self.__kommunikationssocket.send(b"ACK")
- return nachricht
- def senden(self,datenstring):
- laenge = len (datenstring)
- paketanzahl = (laenge-1) // 1024 + 1
- #Sende, wie viele Pakete verschickt werden ...
- self.__kommunikationssocket.send(bytes(str(paketanzahl),encoding='utf8'))
- #Warte Bestätigung ab ...
- self.__kommunikationssocket.recv(1024)
- #Schicke die Pakete mit jeweils 1024 Byte ...
- gesendet = 0
- while gesendet < laenge:
- if gesendet + 1024 <= laenge:
- self.__kommunikationssocket.send(bytes(datenstring[gesendet:gesendet+1024],encoding='utf8'))
- gesendet = gesendet + 1024
- else:
- self.__kommunikationssocket.send(bytes(datenstring[gesendet:],encoding='utf8'))
- gesendet = laenge
- #Warte auf Bestätigung
- self.__kommunikationssocket.recv(1024)
- def schliessen(self):
- # print ("Verbindung wird geschlossen ...")
- self.__kommunikationssocket.close()
- if self.__zielIP != self.__quellIP:
- if self.__server == self.__quellIP:
- # print ("Server fährt runter ...")
- self.__verbindungssocket.close()
- else:
- if not self.__Dateizugriff:
- # print ("Server fährt runter ...")
- self.__verbindungssocket.close()
- remove(self.__dateiname)
- # print ("Lock-Datei wurde gelöscht!")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement