[[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)