Python Socket programlama

mertkaplandar

Hectopat
Katılım
26 Aralık 2019
Mesajlar
343
Çözümler
2
Daha fazla  
Cinsiyet
Erkek
Arkadaşlar öncelikle merhaba.
Python da socket modülünü öğrenmeye başladım. Aynı ağ üzerinden oluşturduğum Client'lara Server üzerinden veri yollayabiliyorum.
Lakin bu yaptığım sadece aynı ağ üzerinde çalışıyor. Bu projede farklı bir ağa bağlı olan bir bilgisayarla nasıl Servere erişebilirim?

[CODE lang="python" title="server.py"]import socket

host = "192.168.2.2"
port = 12345

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("Socket oluşturuldu.")

s.bind((host, port))

s.listen()
print("Socket tüm istekleri dinliyor...")
print()

while True:
c, addr = s.accept()
print('Gelen bağlantı: ', addr)

mesaj = 'Servere Bağlanıldı!'
c.send(mesaj.encode('utf-8'))

[/CODE]
[CODE lang="python" title="client.py"]import socket
import time

# Socket oluşturulması
s = socket.socket()

# Bağlanılacak adres ve port
host = "192.168.2.2"
port = 12345


while True:
try:
# Bağlantıyı yap
s.connect((host, port))
except socket.error as msg:
print("[Server aktif değil.] Mesaj:", msg)
break

while True:
try:
yanit = s.recv(1024)
print(yanit.decode("utf-8"))
except ConnectionResetError as msg:
print("[Bağlantı server tarafından sonlandırıldı.]", msg)
break
except OSError:
break[/CODE]
 
Son düzenleme:
Server bulunan makine de modem/router ve firewall üzerinden kullanacağınız port'a erişimi açtıktan sonra serverın bulunduğu makinenin IP adresi ile erişebilirsiniz.
 
Daha önce şöyle bir şey duymuştum ne kadar doğru bilmiyorum. Router üzerinden port yönlendirme yapmak için statik IP gerekiyordu ve bu internet sağlayıcıları üzerinde ücretliydi. Bu doğru mu?
Bir de firewalldan nasıl port erişimini açabilirim.
Bu işlemleri yaptıktan sonra kodumdaki host değişkenini aynı mı bırakmalıyım yoksa makinemin ip adresi ile mi değiştirmeliyim?
 
Daha önce şöyle bir şey duymuştum ne kadar doğru bilmiyorum. Router üzerinden port yönlendirme yapmak için statik IP gerekiyordu ve bu internet sağlayıcıları üzerinde ücretliydi. Bu doğru mu?
Bir de firewalldan nasıl port erişimini açabilirim.

Port yönlendirme için statik IP adresine ihtiyacınız yok direkt olarak modemin sayfasından açabilirsiniz, statik IP'e şu açıdan ihtiyacınız var Router'a olan bağlantı her reset de ya da kapanma da yani bir şekilde kesildiğinde IP adresiniz değişir ve dinamik olarak ISS atadığı için her defasında yeni IP adresini Client'den tekrar tanımlamanız gerekir bunun önüne geçmek için statik IP'e ya da DDNS servisine ihtiyacınız var. Evet statik IP ücretli olarak ediniliyor.

Firewall için;
 
Mesajı düzenleyerek eklemiştim görmediniz sanırım.
Bu işlemleri yaptıktan sonra kodumdaki host değişkenini aynı mı bırakmalıyım yoksa makinemin IP adresi ile mi değiştirmeliyim?
 
Mesajı düzenleyerek eklemiştim görmediniz sanırım.
Bu işlemleri yaptıktan sonra kodumdaki host değişkenini aynı mı bırakmalıyım yoksa makinemin IP adresi ile mi değiştirmeliyim?
Makinenizin dışarıdan erişime açık olan ip adresini tanımlamanız gerekir. https://www.whatismyip.com gibi servisler üzerinden basitçe hangi adres olduğunu görebilirsiniz.
 
[CODE title="server.py"]import socket

host = "25.168.365.20"
port = 12345

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("Socket oluşturuldu.")

s.bind((host, port))
print(s.getsockname())

s.listen()
print("Socket tüm istekleri dinliyor...")
print()

while True:
c, addr = s.accept()
print('Gelen bağlantı: ', addr)

mesaj = 'Servere Bağlanıldı!'
c.send(mesaj.encode('utf-8'))

[/CODE]
[CODE title="client.py"]import socket
import time

# Socket oluşturulması
s = socket.socket()

# Bağlanılacak adres ve port
host = "25.168.365.20"
port = 12345


while True:
try:
# Bağlantıyı yap
s.connect((host, port))
except socket.error as msg:
print("[Server aktif değil.] Mesaj:", msg)
break

while True:
try:
yanit = s.recv(1024)
print(yanit.decode("utf-8"))
except ConnectionResetError as msg:
print("[Bağlantı server tarafından sonlandırıldı.]", msg)
break
except OSError:
break

[/CODE]
Kodu bu şekili doğru mu yani host bölümü? (IP Adresi benim IP Adresim değildir)
 

Geri
Yukarı