研究:
Getting a "TypeError: an integer is required" in my script
https://github.com/faucamp/python-gsmmodem/issues/39
https://docs.python.org/2/howto/sockets.html
这是我的完整错误输出:
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
代码:
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()
我不确定是否还有其他错误,但我真的很难过这个错误。请询问您是否需要任何其他信息,并提前致谢!
答案 0 :(得分:7)
看起来地址元组的第二个元素需要是一个整数。来自文档:
一对(主机,端口)用于AF_INET地址系列,其中host是一个字符串,表示Internet域符号中的主机名,如'daring.cwi.nl'或IPv4地址,如'100.50.200.5',和端口是一个整数。
尝试将servPort
转换为整数,然后再使用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)
答案 1 :(得分:1)
servPort
必须是整数。您当前将其设置为用户输入的字符串。尝试使用int
将raw_input转换为int(servPort)
。