Aiuto con l'utilizzo del modulo socket

di il
1 risposte

Aiuto con l'utilizzo del modulo socket

Buona sera a tutti,
scrivo per ottenere sostegno nell'utilizzo di una libreria preinstallata di python chiamata socket. Io, nell'utilizzarla, non ho incontrato nessun particolare problema, l'unica cosa è che non sono riuscito a fare ciò che volevo.
In questo caso volevo creare una chat locale con python3 e questo è il mio codice:

FILE SERVER

# server.py

import socket

s = socket.socket()
host = socket.gethostname()
print("Server will start on host: " + host)
port = 8080
s.bind((host, port))
print("\nServer done binding to host and port successfully.")
print("Server is waiting for incoming connections...\n")
s.listen(1)
conn, address = s.accept()
print(address, " Has connected to the server and is now online ...")
print("")
while True:
    message = input(">> ").encode()
    conn.send(message)
    incoming_message = conn.recv(1024).decode()
    print(f" Client : {incoming_message}")

FILE CLIENT

# client.py

import socket

s = socket.socket()
host = input(str("Please enter the hostname of the server: "))
port = 8080
try:
    s.connect((host, port))
    print("Connected to the chat server.")

except:
    print("The server you specified is unreachable.")

while True:
    incoming_message = s.recv(1024)
    incoming_message = incoming_message.decode()
    print(f" Server: {incoming_message}")
    message = input(">> ").encode()
    s.send(message)

finchè apro due "istanze" del mio programma sul mio pc tutto va ma se provo a connettermi al server in eseguzione sul mio con un altro PC connesso alla stessa rete mi da errori. Dice sul pc in client "The server you specified is unreachable."
La mia intenzione non è quella di renderlo online al mondo ma solo a quelli connessi ad una stessa rete.
Idee?

1 Risposte

  • Re: Aiuto con l'utilizzo del modulo socket

    Salve,
    Innanzitutto vorrei farle notare che la funzione "socket.gethostname()" non va bene, o meglio... non basta:
    il codice corretto sarebbe:
    
    host = socket.gethostbyname(socket.gethostname())
    
    #Oppure
    
    name = socket.gethostname() #Per il nome dell'host
    host = socket.gethostbyname(name) #Per l'indirizzo dell'host
    
    Un'altra cosa è che la porta "8080" è riservata; per poterla usare ci vogliono i permessi di amministratore (o di root nel caso di linux).
    Il modo più facile di risolvere il problema è utilizzare una porta non riservata (da 49152 a 65535).
    port = 50000 #Ad esempio
    Se dovesse riscontrare altri problemi, avvisi pure
Devi accedere o registrarti per scrivere nel forum
1 risposte