Seite 1 von 1

TCP send

Verfasst: Freitag 1. März 2019, 12:24
von chq
Hallo,

ich möchte gerne via einer Funktion ein TCP-Paket versenden. Es geht mir lediglich darum, das Paket zu versenden. Ob das Paket ankommt interessiert mich nicht. Der folgende Code funktioniert:

Code: Alles auswählen

def tcpSend(string):
    TCPSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    TCPSock.connect((tcpIP, tcpPort))
    TCPSock.send(string.encode())
    TCPSock.close()
    return
Ist gegen diese Vorgehensweise etwas einzuwänden und falls ja, was?

Gruß Chris

Re: TCP send

Verfasst: Freitag 1. März 2019, 12:46
von __blackjack__
@chq: Es gibt keine TCP-Pakete. TCP ist ein Datenstrom. Ich würde `sendall()` verwenden, denn `send()` garantiert nicht das alles was übergeben wurde, auch tatsächlich versendet wurde.

Die Namensschreibweisen halten sich nicht an die üblichen Konventionen. In Python klein_mit_unterstrichen für alles ausser Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).

Die IP und der Port werden einfach so magisch aus der Umgebung genommen. Die sollten entweder als Argumente in die Funktion kommen, oder es sollten Konstanten sein, und entsprechend Gross geschriebene Namen verwenden.

Socketobjekte sind „contextmanager“ und können mit ``with`` verwendet werden.

Das ``return`` am Ende macht keinen Sinn, die Funktion kehrt auch ohne zum Aufrufer zurück.

Re: TCP send

Verfasst: Freitag 1. März 2019, 12:55
von chq
Daaaaankeschön!!

Gruß Chris

Re: TCP send

Verfasst: Freitag 1. März 2019, 13:45
von chq
__blackjack__ hat geschrieben: Freitag 1. März 2019, 12:46Die IP und der Port werden einfach so magisch aus der Umgebung genommen. Die sollten entweder als Argumente in die Funktion kommen, oder es sollten Konstanten sein, und entsprechend Gross geschriebene Namen verwenden.
Da ich in meinem über 1000-seitigen Python-Fachbuch nichts bzgl. der Definition von "Konstanten" finden konnte, möchte ich an dieser Stelle fragen, wie man diese denn definiert.

IP und Port habe ich bis dato so angegeben:

Code: Alles auswählen

tcpIP = "192.168.2.4"
tcpPort = 23
Gruß Chris

Re: TCP send

Verfasst: Freitag 1. März 2019, 13:50
von Sirius3
@chq: Konstanten werden per Konvention GROSS geschrieben, mehr ist da nicht zu tun.

Re: TCP send

Verfasst: Samstag 2. März 2019, 19:47
von chq
__blackjack__ hat geschrieben: Freitag 1. März 2019, 12:46Socketobjekte sind „contextmanager“ und können mit ``with`` verwendet werden.
Diesen Satz verstehe ich nicht. Kannst Du mir im Bezug auf diesen Satz schreiben, was ich im Rahmen meines Codes falsch gemacht habe?

Gruß Chris

Re: TCP send

Verfasst: Samstag 2. März 2019, 19:59
von Sirius3
Das kann man mit diesen Stichworten in der Dokumentation nachlesen.

Code: Alles auswählen

def tcp_send(ip, port, string):
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as stream:
        stream.connect((ip, port))
        stream.sendall(string.encode())

Re: TCP send

Verfasst: Samstag 2. März 2019, 21:03
von chq
Sirius3 hat geschrieben: Samstag 2. März 2019, 19:59..in der Dokumentation..
Äh- in welcher? :oops:

Gruß Chris

Re: TCP send

Verfasst: Samstag 2. März 2019, 21:19
von __deets__
Die generelle Python-Dokumentation, die einem ja auch Sprach-Konstrukte erklaert.

ZB https://docs.python.org/3/library/stdty ... extmanager

Re: TCP send

Verfasst: Sonntag 3. März 2019, 17:17
von chq
Danke! :wink:

Gruß Chris