Topic: Domanda su piccola applicazione Socket (Client/Server)  (Letto 428 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Bokka

  • python unicellularis
  • *
  • Post: 7
  • Punti reputazione: 0
    • Mostra profilo
Domanda su piccola applicazione Socket (Client/Server)
« il: Dicembre 04, 2017, 10:53 »
Ciao a tutti!

Ho appena scritto (con l'aiuto di una guida) questa piccola applicazione client/server:

SERVER:

import socket

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(('192.168.0.96', 8089))
serversocket.listen(5) # become a server socket, maximum 5 connections

while True:
    connection, address = serversocket.accept()
    buf = connection.recv(64)
    if len(buf) > 0:
        print (buf)           
    break
   

CLIENT:

import socket

clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientsocket.connect(('192.168.0.96', 8089))
testo = "11010003000C"
testo_bytes = str.encode(testo)
clientsocket.send(testo_bytes)


Come avrete già capito, la parte server aspetta una connessione in entrata, una volta avvenuta attende i dati dal client, mentre il client una volta effettuata la connessione al server invia la stringa "11010003000C" convertita in bytes.

La cosa che non capisco è perchè dopo questa parte di codice:

while True:
    connection, address = serversocket.accept()
    buf = connection.recv(64)
    if len(buf) > 0:
        print (buf)           
    break


Più esattamente tra "print (buf)" e "break", se aggiungo lì in mezzo del codice, questo non viene eseguito.
Io vorrei convertire la variabile "buf" in stringa e fare delle operazioni su di essa. Non ricevo nemmeno degli errori, semplicemente passa direttamente all' istruzione break.

Come posso fare?

Offline bebo

  • python erectus
  • ***
  • Post: 241
  • Punti reputazione: 0
    • Mostra profilo
    • bebo_sudo's personal homepage
Re:Domanda su piccola applicazione Socket (Client/Server)
« Risposta #1 il: Dicembre 04, 2017, 12:26 »
Cosi', a naso, penso che len(buf) non sia mai >0. Se metti un else dopo l'if, cosa succede?

Offline riko

  • python deus
  • *
  • moderatore
  • Post: 7.453
  • Punti reputazione: 12
    • Mostra profilo
    • RiK0 Tech Temple
Re:Domanda su piccola applicazione Socket (Client/Server)
« Risposta #2 il: Dicembre 04, 2017, 14:17 »
Cosi', a naso, penso che len(buf) non sia mai >0. Se metti un else dopo l'if, cosa succede?

Il problema di OP e' ovviamente mal specificato (in un linguaggio con indentazione significativa sarebbe abbastanza utile se intende mettere le linee nel blocco dell'if o no).
Pero', pero' lui scrive se mette codice fra print e break non viene eseguito: ovviamente, assumendo un briciolo di precisione nella comunicazione, questo vuole dire che "sa" che print e break sono eseguiti. Ovviamente break come ultimo statement e' "inutile", quindi non ho idea di come fa a sapere che viene eseguito (immagino si sia messo a debuggare a livello di opcode... boh).

Per quello che scrive, questo esempio non e' minimale. L'esempio "minimale" non avrebbe nemmeno a che vedere con i socket, e non c'e' ragione per cui non funzioni.

Quindi io sospetto che o il codice eseguito non e' quello mostrato oppure la descrizione del problema non abbia relazione con il problema.

Offline Giornale di Sistema

  • python sapiens sapiens
  • ******
  • Post: 3.124
  • Punti reputazione: 4
    • Mostra profilo
    • Distillato di Python
Re:Domanda su piccola applicazione Socket (Client/Server)
« Risposta #3 il: Dicembre 04, 2017, 18:25 »
Ciao a tutti!

Ho appena scritto (con l'aiuto di una guida) questa piccola applicazione client/server:

[...]

Come posso fare?

Un buon inizio è quello di formattare il codice per renderlo più leggibile, aiuta molto chi vuole aiutarti sopratutto con un linguaggio come Python dove l'indentazione non è pura estetica.
Per farlo entra in "Modifica" sul tuo precedente messaggio, seleziona il codice, clicca sul pulsante "pythoncode" (quello sulla sinistra di "Aspetto carattere"), salva il messaggio.