En référence à ce qui suit, il s'agit d'un mémorandum lors de la communication de socket TCP / UDP avec python, bien que cela ressemble plus à maintenant.
Socket Internet utilise un protocole de communication appelé TCP / IP, mais pour utiliser ce TCP / IP par programmation, une porte spéciale reliant le monde des programmes et le monde de TCP / IP est nécessaire. La passerelle est le Socket, qui est une caractéristique majeure de la programmation TCP / IP. Source: http://research.nii.ac.jp/~ichiro/syspro98/socket.html
L'alphabet envoyé par le côté client au côté serveur est renvoyé au client avec le côté serveur en le mettant en majuscule.
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))
Exécuter
$ python receive.py
$ python sender.py "hello world"
Sent: hello world
Received: HELLO WORLD
Contrairement à TCP, UDP n'a pas de connexion et continue d'envoyer des données.
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()
Exécuter
$ python receive_udp.py
$ python sender_udp.py "hello world. udp."
Sent: hello world. udp.
Received: HELLO WORLD. UDP.
Si les données de communication sont volumineuses, il y aura une différence en termes de temps d'exécution et de traitement des données manquantes, mais elle est omise car il s'agit d'un essai. Les détails sur la différence entre UDP et TCP sont les suivants.
socketserver --- Framework de serveur réseau Traitement des communications par Python cpython/Lib/socketserver.py Apprenons les bases de la communication socket que je connaissais Matsumoto Naoden Programming Okite 16th Network Programming (Socket Edition) Communication par socket
Recommended Posts