2015-01-28 3 views
2

연구와 작업하는 동안 정수가 필요합니다 :파이썬 형식 오류 : 소켓

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

다른 오류가 있는지 확실하지 않지만이 문제에 정말 놀랐습니다. 다른 정보가 필요한지 물어보십시오. 미리 감사드립니다.

답변

5

주소 튜플의 두 번째 요소가 정수 여야합니다. 문서에서 : bind에서 사용하기 전에 정수로 servPort 변환

A pair (host, port) is used for the AF_INET address family, where host is a string representing either a hostname in Internet domain notation like 'daring.cwi.nl' or an IPv4 address like '100.50.200.5', and port is an integer.

보십시오.

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) 
+0

이게 올바른 것으로 보입니다. 지금 시험하고 있습니다 – mee

+0

완벽하게 작동합니다. 감사 – mee

1

servPort은 정수 여야합니다. 현재 사용자가 입력 한 문자열로 설정되어 있습니다. raw_input을 int(servPort)을 사용하여 int으로 전송 해보세요.

관련 문제