Python Ağ Programlama - TCP Sunucu Çoklu İş Parçacığı
İlgili Etiketler:1. Python ile Web'inizi Güçlendirin
2. Shodan ve Python API
TCP sunucusu birden fazla istemciyle aynı anda soket kurar ve her istemci için bir iş parçacığı gerektirir.
1. Soket paketini içe aktarın
import socket
2. Sunucu soketi oluşturun
socket.socket(AddressFamily, Type)
socket.AF_INET IPv4 türünü temsil eder
SOCK_STREAM TCP anlamına gelir
Birden fazla istemciye hizmet vermek için bağlantı noktası çoğullaması ayarlanmalıdır
tcp_server_socket = socket.socket ( socket.AF_INET , socket.SOCK_STREAM ) _ _ _ _ _ _
#Bağlantı noktası çoğullama: sunucu çıkışında bağlantı noktasını hemen serbest bırakır
tcp_server_socket.setsockopt ( socket.SOL_SOCKET , socket.SO_REUSEADDR , True ) _ _ _ _ _ _
3. Bağlantı noktası numarasını bağlayın
tcp_server_socket.bind
İlk parametre IP adresini temsil eder; genellikle makinenin tüm IP'lerini temsil eden herhangi bir IP belirtmenize gerek yoktur
İkinci parametre bağlantı noktası numarasıdır
tcp_server_socket.bind (( '' , 9090 ) )
4. İzlemeyi ayarlayın
Kurulmayı bekleyen maksimum bağlantı sayısını belirtir: 128
tcp_server_socket.listen ( 128 ) _ _
5. İstemcinin bağlantı isteğini bekleyin
İstemci ve sunucu her başarılı bağlantı kurduğunda yeni bir soket döndürülür
while True :
new_client , ip_port = tcp_server_socket.accept ( ) _
sub_thresd = threading . Thread ( target = handle , args = ( ip_port , new_client ))
sub_thresd.start ( ) _
6. Veri alın
Yeni döndürülen soketi kullanarak mesaj gönderin ve alın
rece_data = new_client.recv ( 1024 ) _ _
if rece_data :
rece_data = rece_data.decode ( 'utf-8' )
print ( "Alınan veri:" , rece_data )
7. Veri gönderin
send_content = "Sorun devam ediyor"
send_data = send_content.encode ( 'utf-8' )
new_client.send ( send_data ) _ _
new_client.close ( ) _

8. Soketi kapatın
tcp_server_socket.close ( ) _
Kod:
import socket
import threading
def handle ( ip_port , new_client ):
print ( "İstemcinin IP'si ve bağlantı noktası numarası: " , ip_port )
while True :
# 5. Veri alın
# Yeni döndürülen soketi kullanarak mesaj gönderin ve alın
rece_data = new_client.recv ( 1024 ) _ _
if rece_data :
rece_data = rece_data.decode ( 'utf-8' )
print ( "Alınan veri:" , rece_data )
# 6. Veri gönderin
send_content = "Sorun devam ediyor"
send_data = send_content.encode ( 'utf-8' )
new_client.send ( send_data ) _ _
new_client.close ( ) _
else :
print ( "İstemci çevrimdışı" , ip_port )
break
if __name__ == '__main__' :
# 1. Sunucu soketi oluşturun
# socket.AF_INET IPv4 türünü temsil eder
# SOCK_STREAM TCP anlamına gelir
tcp_server_socket = socket.socket ( socket.AF_INET , socket.SOCK_STREAM ) _ _ _ _ _ _
tcp_server_socket.setsockopt ( socket.SOL_SOCKET , socket.SO_REUSEADDR , True ) _ _ _ _ _ _
#Bağlantı noktası çoğullama: sunucu çıkışında bağlantı noktasını hemen serbest bırakır
#socket.SOL_SOCKET mevcut soketi temsil eder
#socket._RetAddress çoğullama seçenekleri
#True çoğullamayı belirler
# 2. Bağlantı noktası numarasını bağlayın
# İlk parametre IP adresini belirtir; genellikle makinenin tüm IP'lerini temsil eden herhangi bir IP ayarlamanıza gerek yoktur
#İkinci parametre bağlantı noktası numarasını belirtir
tcp_server_socket.bind (( '' , 9090 ) )
# 3. İzlemeyi ayarlayın
# 128: Kurulmayı bekleyen maksimum bağlantı sayısını belirtir
tcp_server_socket.listen ( 128 ) _ _
# 4. İstemcinin bağlantı isteğini bekleyin
#İstemci ve sunucu her başarılı bağlantı kurduğunda yeni bir soket döndürülür
while True :
new_client , ip_port = tcp_server_socket.accept ( ) _
sub_thresd = threading . Thread ( target = handle , args = ( ip_port , new_client ))
sub_thresd.start ( ) _
# 7. Soketi kapatın
tcp_server_socket.close ( ) _
Telif hakkı beyanı: Bu makalenin içeriği Alibaba Cloud'un gerçek adlı kayıtlı kullanıcıları tarafından sağlanmıştır. Telif hakkı orijinal yazara aittir. Alibaba Cloud geliştirici topluluğu telif hakkına sahip değildir ve ilgili yasal sorumluluğu üstlenmez. Spesifik kurallar için lütfen «Alibaba Cloud Geliştirici Topluluğu Kullanıcı Hizmet Sözleşmesi» ve «Alibaba Cloud Geliştirici Topluluğu Fikri Mülkiyet Koruma Kılavuzu» belgelerine bakın. Bu toplulukta intihal şüphesi olan herhangi bir içerik bulursanız, bildirmek için ihlal şikayet formunu doldurun. Doğrulandıktan sonra bu topluluk, ihlal ettiği iddia edilen içeriği derhal silecektir.
2. Shodan ve Python API
Genel Bakış
TCP sunucusu birden fazla istemciyle aynı anda soket kurar ve her istemci için bir iş parçacığı gerektirir.
Uygulama Adımları
1. Soket paketini içe aktarın
import socket
2. Sunucu soketi oluşturun
socket.socket(AddressFamily, Type)
socket.AF_INET IPv4 türünü temsil eder
SOCK_STREAM TCP anlamına gelir
Birden fazla istemciye hizmet vermek için bağlantı noktası çoğullaması ayarlanmalıdır
tcp_server_socket = socket.socket ( socket.AF_INET , socket.SOCK_STREAM ) _ _ _ _ _ _
#Bağlantı noktası çoğullama: sunucu çıkışında bağlantı noktasını hemen serbest bırakır
tcp_server_socket.setsockopt ( socket.SOL_SOCKET , socket.SO_REUSEADDR , True ) _ _ _ _ _ _
3. Bağlantı noktası numarasını bağlayın
tcp_server_socket.bind
İlk parametre IP adresini temsil eder; genellikle makinenin tüm IP'lerini temsil eden herhangi bir IP belirtmenize gerek yoktur
İkinci parametre bağlantı noktası numarasıdır
tcp_server_socket.bind (( '' , 9090 ) )
4. İzlemeyi ayarlayın
Kurulmayı bekleyen maksimum bağlantı sayısını belirtir: 128
tcp_server_socket.listen ( 128 ) _ _
5. İstemcinin bağlantı isteğini bekleyin
İstemci ve sunucu her başarılı bağlantı kurduğunda yeni bir soket döndürülür
while True :
new_client , ip_port = tcp_server_socket.accept ( ) _
sub_thresd = threading . Thread ( target = handle , args = ( ip_port , new_client ))
sub_thresd.start ( ) _
6. Veri alın
Yeni döndürülen soketi kullanarak mesaj gönderin ve alın
rece_data = new_client.recv ( 1024 ) _ _
if rece_data :
rece_data = rece_data.decode ( 'utf-8' )
print ( "Alınan veri:" , rece_data )
7. Veri gönderin
send_content = "Sorun devam ediyor"
send_data = send_content.encode ( 'utf-8' )
new_client.send ( send_data ) _ _
new_client.close ( ) _

8. Soketi kapatın
tcp_server_socket.close ( ) _
Kod:
import socket
import threading
def handle ( ip_port , new_client ):
print ( "İstemcinin IP'si ve bağlantı noktası numarası: " , ip_port )
while True :
# 5. Veri alın
# Yeni döndürülen soketi kullanarak mesaj gönderin ve alın
rece_data = new_client.recv ( 1024 ) _ _
if rece_data :
rece_data = rece_data.decode ( 'utf-8' )
print ( "Alınan veri:" , rece_data )
# 6. Veri gönderin
send_content = "Sorun devam ediyor"
send_data = send_content.encode ( 'utf-8' )
new_client.send ( send_data ) _ _
new_client.close ( ) _
else :
print ( "İstemci çevrimdışı" , ip_port )
break
if __name__ == '__main__' :
# 1. Sunucu soketi oluşturun
# socket.AF_INET IPv4 türünü temsil eder
# SOCK_STREAM TCP anlamına gelir
tcp_server_socket = socket.socket ( socket.AF_INET , socket.SOCK_STREAM ) _ _ _ _ _ _
tcp_server_socket.setsockopt ( socket.SOL_SOCKET , socket.SO_REUSEADDR , True ) _ _ _ _ _ _
#Bağlantı noktası çoğullama: sunucu çıkışında bağlantı noktasını hemen serbest bırakır
#socket.SOL_SOCKET mevcut soketi temsil eder
#socket._RetAddress çoğullama seçenekleri
#True çoğullamayı belirler
# 2. Bağlantı noktası numarasını bağlayın
# İlk parametre IP adresini belirtir; genellikle makinenin tüm IP'lerini temsil eden herhangi bir IP ayarlamanıza gerek yoktur
#İkinci parametre bağlantı noktası numarasını belirtir
tcp_server_socket.bind (( '' , 9090 ) )
# 3. İzlemeyi ayarlayın
# 128: Kurulmayı bekleyen maksimum bağlantı sayısını belirtir
tcp_server_socket.listen ( 128 ) _ _
# 4. İstemcinin bağlantı isteğini bekleyin
#İstemci ve sunucu her başarılı bağlantı kurduğunda yeni bir soket döndürülür
while True :
new_client , ip_port = tcp_server_socket.accept ( ) _
sub_thresd = threading . Thread ( target = handle , args = ( ip_port , new_client ))
sub_thresd.start ( ) _
# 7. Soketi kapatın
tcp_server_socket.close ( ) _
Telif hakkı beyanı: Bu makalenin içeriği Alibaba Cloud'un gerçek adlı kayıtlı kullanıcıları tarafından sağlanmıştır. Telif hakkı orijinal yazara aittir. Alibaba Cloud geliştirici topluluğu telif hakkına sahip değildir ve ilgili yasal sorumluluğu üstlenmez. Spesifik kurallar için lütfen «Alibaba Cloud Geliştirici Topluluğu Kullanıcı Hizmet Sözleşmesi» ve «Alibaba Cloud Geliştirici Topluluğu Fikri Mülkiyet Koruma Kılavuzu» belgelerine bakın. Bu toplulukta intihal şüphesi olan herhangi bir içerik bulursanız, bildirmek için ihlal şikayet formunu doldurun. Doğrulandıktan sonra bu topluluk, ihlal ettiği iddia edilen içeriği derhal silecektir.
İlgili Makaleler
-
Veri Depolama İçin 6 İsteğe Bağlı Teknoloji
Bilgi Bankası Ekibi
Daha Fazla Özel Teklifi Keşfedin
-
Kısa Mesaj Servisi (SMS) & E-posta Servisi
50.000 e-posta paketi sadece 1,99 USD'den, 120 kısa mesaj ise yalnızca 1,00 USD'den başlayan fiyatlarla sunulmaktadır.
