2013-11-01 3 views
9

Es folgt ein Python-Socket-Schnipsel zu unterscheiden? Bis jetzt programmierte ich nur TCP-Verbindungen, wobei ich die obige Zeile verwendete, aber wahrscheinlich war mir das nicht bewusst. Kann ich UDP-Verbindungen mit Python-Sockets programmieren? Wie kann ich die Transportschicht unterscheiden?wie TCP/UDP-Sockets bei der Programmierung

Die Frage ist nicht eng mit Python verbunden, Erklärungen sind auch in C++ oder sonst etwas willkommen.

Antwort

9

Das zweite Argument bestimmt den Socket-Typ; socket.SOCK_DGRAM ist UDP, socket.SOCK_STREAM ist ein TCP-Socket. Dies alles vorausgesetzt Sie verwenden eine AF_INET oder AF_INET6 Socket-Familie.

Bevor Sie fortfahren, vielleicht wollten Sie gehen und lesen Sie die Python socket programming HOWTO, sowie andere Socket-Programmierung Tutorials. Der Unterschied zwischen UDP- und TCP-Sockets ist ziemlich groß, aber die Unterschiede übersetzen sich über Programmiersprachen hinweg.

Einige Informationen über die Buchsen auf der Python Wiki:

+0

"* ... ist es ein TCP-Socket *" genau dann, wenn das erste Argument 'AF_INET'. –

+0

@ Robᵩ: Oder 'AF_INET6' –

+0

Zustimmen, ein' STREAM' bedeutet eine TCP-Verbindung. – pmoleri

5

Die allgemeine Syntax für einen Sockel zu schaffen ist:

socket(socket_family, socket_type, protocol=0) 

Wir können entweder AF_INET (für IPv4) oder AF_INET6 (IPv6) als Tanne st Argument i., e für socket_family.

Der Socket-Typ ist das Argument, das bestimmt, ob der zu erstellende Socket TCP oder UDP ist. Für TCP-Sockets ist es SOCK_STREAM und für UDP SOCK_DGRAM (DGRAM - Datagramm). Schließlich können wir das Protokollargument weglassen, das es auf den Standardwert '0' setzt.

Für TCP-Sockets hätten Sie die Methoden bind(), listen() und accept() für Server-Sockets und connect() oder connect_ex() für Client-Sockets verwenden müssen. Für UDP-Sockets benötigen Sie hingegen keine listen() -, accept() - und connect() -Methoden (da TCP-Sockets verbindungsorientierte Sockets sind, während UDP-Sockets verbindungslose Sockets sind).

Es gibt bestimmte Methoden für UDP zum Senden und Empfangen von Paketen recvfrom() und sendto(), während recv() und send() für TCP sind. Weitere Informationen zu den entsprechenden Methoden für TCP und UDP finden Sie unter documentation for socket. Auch Core Python Applications Programming by Wesley Chun ist ein besseres Buch für einige hübsche Grundlagen zur Socket-Programmierung.

+1

danke für Ihre Erklärung, vor allem für das Buch! – ducin

0

Der Hauptunterschied besteht darin, dass TCP-Sockets verbindungsbasiert sind. Sie können nichts senden oder empfangen, bis Sie mit einem anderen TCP-Socket auf dem Remotecomputer verbunden sind. Sobald ein TCP-Socket angeschlossen ist, kann er nur von dem entfernten Rechner senden und empfangen. Dies bedeutet, dass Sie für jeden Client in Ihrer Anwendung einen TCP-Socket benötigen. UDP ist nicht verbindungsbasiert, Sie können jederzeit mit demselben Socket zu/von jedem senden und empfangen.

~ Muralidhar gundala

Verwandte Themen