Python TypeError: 在使用套接字时需要一个整数。

5

研究:

我的脚本中出现“TypeError:需要整数”

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()

我不确定是否还有其他错误,但是这个问题实在让我困惑。如果您需要其他信息,请随时询问,提前感谢您!

2个回答

7
看起来地址元组的第二个元素需要是一个整数。根据文档:
“在AF_INET地址族中,使用一对(主机,端口),其中主机是表示互联网域符号(如“daring.cwi.nl”)或IPv4地址(如“100.50.200.5”的字符串),而端口是一个整数。”
在使用bind之前尝试将servPort转换为整数。
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

servPort 必须是一个整数。您当前将其设置为用户输入的字符串。尝试使用 int(servPort)raw_input 强制转换为整数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接