Socket bağlantısı "açık-kapalı" olduğunu görme

aşağıdaki kodda amaç hangi ip adresin socket ile sunucu açıp açmadığını görmek. ancak bu işlemi yaparken s.connect((ip_address, 12345)) satırında bu socket bağlantısına istek göndermiş oluyor. Bu benim istemediğim bir şey. Çünkü istek gönderince sunucu kodu bu isteği kabul edip iletişime geçmeye çalışıyor. Benim istediğim ise sadece hangi cihazın socket ile bağlantı açıp açmadığı.

import nmap
import ping3
import socket

def scan_ip():
    ip_address = socket.gethostbyname(socket.gethostname())
    ip_range = '.'.join(ip_address.split('.')[:3]) + '.0/24'
    nm = nmap.PortScanner()
    nm.scan(ip_range, arguments='-sn')
    hosts = nm.all_hosts()
    print("Ağdaki tüm cihazların IP ve MAC adresleri:")
            
    for host in hosts:
        if 'mac' in nm[host]['addresses']:
            ip_address = nm[host]['addresses']['ipv4']
            mac_address = nm[host]['addresses']['mac']
            
            # Ping gönder
            response_time = ping3.ping(ip_address)
            
            
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.settimeout(1)  # Bağlantı zaman aşımı süresi 1 saniye
            
            try:
                s.connect((ip_address, 12345))  
                s.close()
                is_open = True
            except (socket.timeout, ConnectionRefusedError):
                is_open = False
                
            if response_time is not None:
                pinf_durumu = "Açık"
            else:
                pinf_durumu = "Kapalı"
                
            if is_open:


                socket_status = "Açık"
            else:
                socket_status = "Kapalı"
                
            item_text = f"{ip_address}    {mac_address}    Ping: {pinf_durumu}    Socket: {socket_status}"
            print(item_text)
scan_ip()

Nasıl halledebiliriz?

@Emirhan_Erdem sunucu kodu ise şu şekilde:

    def connect_to_server(self):
        #bağlantılara açık olmaya yarıyor
        selected_ip = self.server_erkek.ip_adres.text() 
        self.HOST = selected_ip
        

        self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.server_socket.bind((self.HOST, self.PORT))
        self.server_socket.listen(1)
        print(f"* Bağlantı için {self.HOST}:{self.PORT} dinleniyor...")

        self.client_socket, address = self.server_socket.accept()#gelen isteği kabul et
        print(f"* {address} adresinden bir bağlantı alındı.")
        print("ses göndermek için ilk iönce öğrenci tarafın hoparlörünü seçiniz...")
        #burada ara satırlara time.sleep(1) koydum çünkü tek thread ile yaptığımdan aynı anda yapamıyordu, başka thread koymak istemedim.
        time.sleep(1)
        self.hoparlor_liste_al()
        self.yazi_gonder_t()

        time.sleep(1)
        #self.start()

        time.sleep(1)
        self.start_get_sound()
        
        time.sleep(1)
        self.get_sound_contunie()
        
        p = pyaudio.PyAudio()
        stream = p.open(format=pyaudio.paInt16,
                            channels=self.CHANNELS,
                            rate=self.RATE,
                            input=True,
                            frames_per_buffer=self.CHUNK)

        speaker_stream = p.open(format=pyaudio.paInt16,
                                    channels=self.CHANNELS,
                                    rate=self.RATE,
                                    output=True)
        

        stream.stop_stream()
        stream.close()
        speaker_stream.stop_stream()
        speaker_stream.close()
        p.terminate()

Client eğer sunucu tarafından muhatap alınmak istiyorsa bağlandıktan hemen sonra sabit bir mesaj yollayabilir. Sunucu da bu mesajı bekler ve gelmez ise bir şey yapmaz/bağlantıyı keser.

Bu da işinize yarayabilir:

Baglanti acmadan baglanti acilip acilmadigini gormeye calisiyorsunuz gibi duruyor.