piton

Python Soket Dosya Aktarımı Gönder

Python Soket Dosya Aktarımı Gönder
Bu makalenin amacı, öğrenmek python programı aracılığıyla ağ üzerinden bir metin dosyası nasıl aktarılır. Bu dosya aktarımı, python3'te soket programlamayı kullanmak için sunucu istemci modeline dayanmaktadır+.

Temel Kurulum Şeması:

İşte bu programı çalıştırmak için temel kurulum şeması.

Basit olması için, makale boyunca Sistem A'yı A_client ve Sistem B'yi B_server olarak adlandıracağız.

Dosya gereksinimleri:

İhtiyacımız var sunucu.p ve bu dosya sunucu sisteminde bulunmalıdır. Bizim durumumuzda sunucu.py B_server sisteminde olmalıdır.

Diğer iki dosya müşteri.p ve örneklem.Txt istemci sisteminde mevcut olmalıdır. Bizim durumumuzda bu iki dosya A_client sisteminde bulunmalıdır.

varsayımlar:

İşte varsayımlar:

sınırlamalar:

Daha fazla ilerlemeden önce, bu programın bazı sınırlamaları olduğunu bilmeliyiz.

Kurulum gereksinimleri:

Sunucu Kaynak Kodu:

https://github.com/linuxhintcode/web örnekleri/blob/master/python_send_file/sunucu.p

Müşteri Kaynak Kodu:

https://github.com/linuxhintcode/web örnekleri/blob/master/python_send_file/client.p

Programlar ve beklenen çıktı nasıl çalıştırılır:

İşte programı yürütmek için adımlar.

Adım 1: B_server sistemine gidin ve bir terminal açın. Bir terminali açmanın kısa yolu Alt+Ctrl+t.

Adım 2: Şimdi sunucunun bulunduğu yola gidin.py mevcut.

Adım 3: Şimdi sunucuyu çalıştırın.py aşağıdaki gibi

piton3 sunucusu.p

Herhangi bir hata olmamalı ve aşağıdaki baskıları görmelisiniz

Sunucu 9898 numaralı bağlantı noktasında listeleniyor

Kopyalanan dosya adı recv olacak.sunucu tarafında txt

Adım 4: Şimdi terminali A_client sisteminde açın.

Adım 5: İstemcinin bulunduğu yola gidin.py ve örnek.txt var.

Adım6: Şimdi istemciyi çalıştırın.py aşağıdaki gibi

python3 istemcisi.p

Sunucunun IP adresini bilmemiz gerektiğini gözlemledik. B_server sisteminin IP adresini öğrenmek için aşağıdaki komutu çalıştırabiliriz.

ifconfig

Şimdi A_client sisteminin çıktısı şöyle olmalı

################## Sunucudan aşağıdaki mesaj alındı ​​###################
|---------------------------------|
Merhaba Müşteri[IP adresi: 192.168.1.102],
**Sunucuya Hoş Geldiniz**
-sunucu
|---------------------------------|

Adım7: Şimdi B_server'a gidin ve aşağıdaki çıktıyı arayın

Dosya başarıyla kopyalandı
Sunucu bağlantıya kapalı

Adım8: Bir dosya adı recv olmalıdır.txt sunucu klasöründe. Bu kaydın içeriği.robots.txt aynı örnek olmalıdır.Txt.

Böylece, bir dosyayı python programı aracılığıyla istemciden sunucuya ağ üzerinden başarıyla kopyaladık.

Kod açıklamaları:

iki python dosyası var sunucu.p ve müşteri.p.

Herhangi bir kodun sunucu içinde aynı olup olmadığını bir kez açıklayacağımızı unutmayın.py ve istemci.p.

  1. sunucu.not:
#!/usr/bin/env python3

Bu, varsayılan olarak bu sunucu anlamına gelen shebang satırıdır.py python3 kullanmalı. Bu hattın bir avantajını görelim.

sunucuyu çalıştırdık.py veya istemci.py gibi piton3 <.py file name>. Şimdi python3 kullanmadan python dosyasını çalıştırabiliriz. Aşağıdaki komutları takip edin

Süper kullanıcı moduna gidin:

su

tüm izinleri ver .py dosyası:

chmod 777 sunucusu.p

Sunucuyu çalıştır.not:

./sunucu.py içe aktarma soketi
Soket kitaplığını python programına aktarırken
bağlantı için soket kullanmak.
s = soket.priz()

Bir nesne yaratıyoruz "s" tüm soket yöntemlerine erişmek için. Bu bir OOP konseptidir.

PORT = 9898

Şimdi sunucunun dinleyeceği bir bağlantı noktası seçiyoruz. Bunun yerine rezerve edilmemiş portu kullanabiliriz.

s.bağlama((", PORT))

Sunucu ip adresini bu bağlantı noktasına [9898] bağlamak için bağlama yöntemini kullanıyoruz. Bir gözlem, bağlama yönteminin ilk argümanı yerine sunucunun tam IP adresini kullanabilirdik, ancak bu iyi çalıştığı için boş bırakmayı seçtik.

s.bağlama((IP adresi, PORT))
dosya = open("recv.robots.txt", "wb")

Bir dosya ismi açtık “recv.txt” yazma modu için sunucuda ve dosya işaretçisi var. İstemciden bir metin dosyası kopyalamamız gerektiğinden bu gereklidir.

Doğru iken:

Sunucunun işi, bir istemcinin bu 9898 bağlantı noktasındaki sunucuyla iletişim kurmasını beklemek olduğundan, sonsuz bir süre döngüsü başlatalım. Yani bu while döngüsü gereklidir.

bağlantı, adres = s.kabul etmek()

Bu kod, istemciden gelen herhangi bir bağlantı isteğini kabul etmek içindir. Conn kullanacak “bağlantı" müşteri ile iletişim kurmak ve "adre" 9898 numaralı bağlantı noktasında bu sunucuya kargaşa isteği gönderen istemcinin IP adresidir.

msg = "\n\n|---------------------------------|\n Merhaba Müşteri[IP adresi:
"+ addr[0] + "], \n **Sunucuya Hoş Geldiniz** \n -Sunucu\n
|---------------------------------|\n \n\n"

Bu kod, müşteriye gönderilecek bir mesaj oluşturmak içindir. Bu mesaj istemci terminalinde yazdırılmalıdır. Bu, istemcinin sunucuyla iletişim kurabildiğini doğrular.

bağlantı.gönder (mesaj.kodlamak())

Şimdi mesajımız hazır ve bunu kullanarak müşteriye gönderiyoruz "bağ". Bu kod aslında müşteriye mesaj gönderir.

RecvData = bağlantı.recv(1024)

Bu kod, istemci tarafından gönderilen tüm verileri alıyor. Bizim durumumuzda numunenin içeriğini bekliyoruz.metin dosyası "RecvData".

RecvData iken:

RecvData koşuluyla bir while döngüsü daha boş değil. Bizim durumumuzda boş değil.

dosya.yaz(RecvData)

İçeride içeriğimiz olduğunda "RecvData" o zaman o dosyaya yazıyoruz "recv.Txt" dosya işaretçisini kullanma "dosya".

RecvData = bağlantı.recv(1024)

İstemciden herhangi bir veri olup olmadığını tekrar almaya çalışıyorum. bir Zamanlar "RecvData" veri yok, kod while döngüsünü kıracak.

dosya.kapat()

Bu, dosya yazma ile işimiz bittiği için dosya işaretçisini kapatacaktır.

bağlantı.kapat()

Bu, istemciyle olan bağlantıyı kapatacak.

kırmak

Bu, B_server'daki sonsuz while döngüsünden çıkmak içindir.

  1. müşteri.not:
ithalat sistemi

Python'da argüman özelliğini kullanmak istediğimiz gibi sys kitaplığını içe aktarıyoruz.

if (len(sys.argv) > 1):
ServerIp = sistem.argv[1]
Başka:
print("\n\n\n python3 istemcisi gibi çalıştır.p < serverip address > \n\n")
çıkış(1)

Dosya adı istemcisinden sonra B_server'ın IP adresini geçerken.py çalıştırırken, o sunucu IP adresini istemci içinde yakalamamız gerekiyor.

… if (len(sys.argv) > 1): => Kullanıcının en az bir bağımsız değişkeni IP adresi olarak ilettiğinden ve bu IP adresini bağımsız olarak yakaladığından emin olmak için "SunucuIP".

Kullanıcı en az bir bağımsız değişken kodu geçmezse, yardım gösterir ve koddan çıkar.

PORT = 9898

Bu, B_server tarafında belirtilen bağlantı noktasıyla aynı olmalıdır.

s.bağlan((ServerIp, PORT))

Bu kod, o port ile sunucu IP'sine TCP bağlantısı yapacaktır. Bu noktada yanlış olan herhangi bir şey, bağlantıda başarısızlıklara neden olur.

dosya = open("örnek.robots.txt", "rb")

"Örnek" açıyoruz.txt” salt içeriği okumak için okuma modunda.

SendData = dosya.oku(1024)

Dosyanın içeriğini okuma ve içine "SendData” değişken.

SendData iken:

Eğer “ ise bir while döngüsü başlatıyoruzSendData” veri var. Bizim durumumuzda ise “örnek.robots.txt” boş değil, veriye sahip olmalı.

s.gönder(SendData)

Artık içeriği gönderebiliriz "örneklem.Txt" soket nesnesini kullanarak sunucuya "s".

SendData = dosya.oku(1024)

Bir şey kaldıysa tekrar oku. Yani dosyadan okunacak bir şey olmayacak “SendData” boş olacak ve while döngüsünden çıkacak.

s.kapat()

Bu, istemci tarafındaki bağlantıyı kapatmıyor.

Ubuntu Ekran Görüntüleri Sunucu tarafı

Ubuntu Ekran Görüntüleri İstemci tarafı

Test edilmiş kombinasyonlar:

  • Sunucu olarak Linux ve istemci olarak Linux: PASS
  • İstemci olarak Linux ve sunucu olarak Linux: PASS
  • Sunucu olarak Linux ve istemci olarak Windows10: PASS
  • İstemci olarak Linux ve sunucu olarak Windows10: PASS

Öneri, sunucu ve istemci için iki Linux sistemi kullanmaktır.

Beklenen Hatalar:

  1. Sunucu 9898 portunda çalışmıyorsa aşağıdaki hatayı görebilirsiniz

Geri izleme (en son arama son):

Dosya "istemci.py", satır 22, içinde
s.bağlan((ServerIp, PORT))
ConnectionRefusedError: [Errno 111] Bağlantı reddedildi
  1. İstemci tarafında IP adresi geçilmezse aşağıdaki hata görülür

gibi koş

python3 istemcisi.p < serverip address >
  1. 1 ise aşağıdaki hata görülürAziz istemci tarafındaki argüman bir IP adresi değil

Geri izleme (en son arama son):

Dosya "istemci.py", satır 22, içinde
s.bağlan((ServerIp, PORT))
priz.gaierror: [Errno -2] Ad veya hizmet bilinmiyor
  1. Bağlantı noktası 98980 gibi kullanılıyorsa aşağıdaki hata görülür

Geri izleme (en son arama son):

Dosya "istemci.py", satır 22, içinde
s.bağlan((ServerIp, PORT))
OverflowError: getsockaddrarg: bağlantı noktası 0-65535 olmalıdır.
  1. Aşağıdaki hata “örnek.txt” istemci tarafında mevcut değil.

Geri izleme (en son arama son):

Dosya "istemci.py", satır 25, içinde
dosya = open("örnek.robots.txt", "rb")
FileNotFoundError: [Errno 2] Böyle bir dosya veya dizin yok: 'örnek.Txt'

Sonuç:

Bu programı kullanarak python programını kullanarak bir sistemden başka bir sisteme ağ üzerinden basit bir metin dosyası gönderebiliriz. Bu bize, ağ üzerinden veri göndermek için de temel python ve soket programlama öğrenmesini sağlar.

Gamecube & Wii için en yeni Dolphin Emulator'ı Linux'a yükleyin
Dolphin Emulator, seçtiğiniz Gamecube & Wii oyunlarını Linux Kişisel Bilgisayarlarda (PC) oynamanıza izin verir. Ücretsiz olarak kullanılabilen ve aç...
Linux'ta GameConqueror Cheat Engine Nasıl Kullanılır
Makale, Linux'ta GameConqueror hile motorunu kullanma hakkında bir kılavuzu kapsar. Windows'ta oyun oynayan birçok kullanıcı, oyun deneyimini geliştir...
Linux için En İyi Oyun Konsolu Emülatörleri
Bu makale, Linux için kullanılabilen popüler oyun konsolu öykünme yazılımını listeleyecektir. Öykünme, oyun konsollarının, komut setlerinin ve ilgili ...