[[oktatas:programozás:python|< Python]] ====== Hálózat ====== * **Szerző:** Sallai András * Copyright (c) 2020, Sallai András * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]] * Web: https://szit.hu ===== TCP szerver ===== ==== Szerver ==== #!/usr/bin/python3 import socket # foglalatobjektum létrehozása serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # a helyi gépnév lekérdezése host = socket.gethostname() port = 9999 # kapcsolódás a porthoz serversocket.bind((host, port)) # 5 kérés kerülhet várakozási sorba serversocket.listen(5) while True: # kapcsolat elfogadása clientsocket,addr = serversocket.accept() print((clientsocket.recv(1024)).decode()) clientsocket.send('vmi\n'.encode()) print("Kapcsolat innen %s" % str(addr)) msg = 'Kösz a kapcsolatot'+ "\r\n" clientsocket.send(msg.encode('utf-8')) clientsocket.close() ==== Kliens ==== #!/usr/bin/python3 import socket # foglalatobjektum létrehozása s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # a helyi gépnév lekérdezése host = socket.gethostname() port = 9999 # kapcsolódás az adott gép portjához s.connect((host, port)) s.sendall('árvíztűrő'.encode()) # 1024 bájt fogadása msg = s.recv(1024) s.close() print (msg.decode('utf-8')) ==== Használat ==== === Linuxon === chmod + szerver.py kliens.py ./szerver.py & ./kliens.py Ha szeretnénk kilőni parancssorból a szervert: pkill szerver.py fuser 9999/tcp Az fuser parancs nem kötelező, de ha nem használjuk 1 percig várni kell, amíg a foglalat fel nem szabadul. ===== Weblap leszedése ===== import urllib.request, urllib.error, urllib.parse url = 'https://szit.hu' response = urllib.request.urlopen(url) webContent = response.read() print(webContent) ===== Egyszerű üzenetküldő kliens ===== #!/usr/bin/python3 import socket try: host = 'localhost' port = 9000 c = socket.socket(socket.AF_INET, socket.SOCK_STREAM) c.connect((host, port)) c.send('árvíztűrő'.encode()) c.shutdown(socket.SHUT_RDWR) c.close() except socket.error: print('Hiba! A kapcsolat sikertelen!') ===== IPC szerver ===== import socket from threading import Thread class SimpleProgram(Thread): def __init__(self): Thread.__init__(self) self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.socket.bind(('localhost', 9000)) self.socket.listen(5) self.setDaemon(True) self.start() def run(self): while True: try: client, addr = self.socket.accept() data = client.recv(1024).decode() print(data) client.shutdown(socket.SHUT_RDWR) client.close() except socket.error: print("Hiba! A foglalat létrehozás sikertelen!") try: self.socket.shutdown(socket.SHUT_RDWR) except: pass self.socket.close() prog = SimpleProgram() prog.run() ===== Forrás ===== * https://www.tutorialspoint.com/python3/python_networking.htm (2020) * https://docs.python.org/3.0/library/socketserver.html (2020) * https://docs.python.org/3/howto/sockets.html (2020) * https://docs.python.org/3/library/socketserver.html (2020) * https://www.journaldev.com/15906/python-socket-programming-server-client (2020) * https://www.pubnub.com/blog/socket-programming-in-python-client-server-p2p/ (2020) * https://realpython.com/python-sockets/ (2020)