Python TypeError: un numero intero è richiesto durante il lavoro, con Prese di corrente

Ricerca:

Ottenere un “TypeError: un numero intero è necessaria” nel mio script

https://github.com/faucamp/python-gsmmodem/issues/39

https://docs.python.org/2/howto/sockets.html

Qui è il mio errore completo di uscita:

Traceback (most recent call last):
File "/home/promitheas/Desktop/virus/socket1/socket1.py", line 20, in <module>
createSocket()
File "/home/promitheas/Desktop/virus/socket1/socket1.py", line 15, in    createSocket
ServerSock.bind((socket.gethostname(), servPort))
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
TypeError: an integer is required

Codice:

import socket

# Acquiring the local public IP address
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 0))

# Defining some variables
servIpAddr = s.getsockname()[0]
servPort = ''
while ((len(servPort) < 4)): # and (len(servPort) > 65535)
    servPort = raw_input("Enter server port. Must be at least 4     digits.\n> ")

# Creating a socket to wait for a connection
def createSocket():
    ServerSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    ServerSock.bind((socket.gethostname(), servPort)) # This is where the error occurs
    ServerSock.listen(5)
    (clientsocket, address) = ServerSock.accept()

if __name__ == "__main__":
    createSocket()

Non so se ci sono altri errori, ma io sono davvero perplesso su questo. Si prega di chiedere se avete bisogno di qualsiasi altra info, e grazie in anticipo!

OriginaleL’autore mee | 2015-01-28

2 Replies
  1. 7

    Sembra che il secondo elemento di indirizzo tupla deve essere un numero intero. Dalla documentazione:

    Una coppia (host, port) è utilizzato per la AF_INET indirizzo di famiglia, dove host è una stringa che rappresenta un nome host in Internet dominio notazione come ‘daring.cwi.nl’ o un indirizzo IPv4 come ‘100.50.200.5’, e porta è un numero intero.

    Provare a convertire servPort per un intero prima di utilizzarlo in bind.

    servPort = ''
    while ((len(servPort) < 4)): # and (len(servPort) > 65535)
        servPort = raw_input("Enter server port. Must be at least 4     digits.\n> ")
    servPort = int(servPort)
    questo sembra essere corretta. Sto testando ora
    questo funziona perfettamente. grazie

    OriginaleL’autore Kevin

  2. 1

    servPort deve essere un numero intero. Attualmente è impostata su una stringa che l’utente inserisce. Provare casting il raw_input per un int utilizzando int(servPort).

    OriginaleL’autore huderlem

Lascia un commento