In Bezug auf das Folgende ist es ein Memorandum, wenn TCP / UDP-Socket-Kommunikation mit Python, obwohl es sich eher wie jetzt anfühlt.
Socket Das Internet verwendet ein Kommunikationsprotokoll namens TCP / IP. Um dieses TCP / IP programmgesteuert nutzen zu können, ist jedoch eine spezielle Tür erforderlich, die die Welt der Programme und die Welt der TCP / IP miteinander verbindet. Das Gateway ist der Socket, ein Hauptmerkmal der TCP / IP-Programmierung. Quelle: http://research.nii.ac.jp/~ichiro/syspro98/socket.html
Das von der Clientseite an die Serverseite gesendete Alphabet wird an den Client zurückgegeben, wobei die Serverseite es großschreibt.
receiver.py
import socketserver
class MyTCPHandler(socketserver.BaseRequestHandler):
def handle(self):
self.data = self.request.recv(1024).strip()
print("{} wrote:".format(self.client_address[0]))
print(self.data)
self.request.sendall(self.data.upper())
if __name__ == "__main__":
HOST, PORT = "localhost", 9999
with socketserver.TCPServer((HOST, PORT), MyTCPHandler) as server:
server.serve_forever()
sender.py
import socket
import sys
HOST, PORT = "localhost", 9999
data = " ".join(sys.argv[1:])
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.connect((HOST, PORT))
sock.sendall(bytes(data + "\n", "utf-8"))
received = str(sock.recv(1024), "utf-8")
print("Sent: {}".format(data))
print("Received: {}".format(received))
Lauf
$ python receive.py
$ python sender.py "hello world"
Sent: hello world
Received: HELLO WORLD
Im Gegensatz zu TCP hat UDP keine Verbindung und sendet weiterhin Daten.
receiver.py
import socketserver
class MyUDPHandler(socketserver.BaseRequestHandler):
def handle(self):
data = self.request[0].strip()
socket = self.request[1]
print("{} wrote:".format(self.client_address[0]))
print(data)
socket.sendto(data.upper(), self.client_address)
if __name__ == "__main__":
HOST, PORT = "localhost", 9999
with socketserver.UDPServer((HOST, PORT), MyUDPHandler) as server:
server.serve_forever()
sender.py
import socketserver
class MyUDPHandler(socketserver.BaseRequestHandler):
def handle(self):
data = self.request[0].strip()
socket = self.request[1]
print("{} wrote:".format(self.client_address[0]))
print(data)
socket.sendto(data.upper(), self.client_address)
if __name__ == "__main__":
HOST, PORT = "localhost", 9999
with socketserver.UDPServer((HOST, PORT), MyUDPHandler) as server:
server.serve_forever()
Lauf
$ python receive_udp.py
$ python sender_udp.py "hello world. udp."
Sent: hello world. udp.
Received: HELLO WORLD. UDP.
Wenn die Kommunikationsdaten groß sind, gibt es einen Unterschied in Bezug auf die Ausführungszeit und die Behandlung fehlender Daten, diese werden jedoch weggelassen, da es sich um einen Test handelt. Details zum Unterschied zwischen UDP und TCP sind wie folgt.
socketserver --- Network Server Framework Kommunikationsverarbeitung durch Python cpython/Lib/socketserver.py Lassen Sie uns die Grundlagen der Socket-Kommunikation lernen, die ich kannte Matsumoto Naoden Programming Okite 16. Netzwerkprogrammierung (Socket Edition) Socket-Kommunikation
Recommended Posts