2011-12-04 42 views
0

即時通訊試圖瞭解套接字,我不能設法連接到IP,端口。 這是我拿到劇本:插座給我錯誤,當我嘗試連接-python

了Stian的插座測試工具

import socket 

print "send request to website to check if sockets work right" 
ip = raw_input("website ip: ") 
port = raw_input("website port: ") 
socket.connect(ip, port) 
tosend = "this is a test" 
currVal = 0 
while currVal < 1: 
    socket.send(tosend) 
    print "1 sockets sent..." 
    currrVal += 1 
print "Done sending sockets. This hopefully worked" 

是什麼毛病Python代碼? 這是否只適用於ipv4或ipv6?還是它與兩個工作?

錯誤IM抵達:

C:\Users\Swipper\Documents\Python\sockets>sock.py 
send request to website to check if sockets work right 
website ip: 127.0.0.1 
website port: 
Traceback (most recent call last): 
    File "C:\Users\Swipper\Documents\Python\sockets\sock.py", line 8, in <modu 
le> 
    socket.connect(ip, port) 
AttributeError: 'module' object has no attribute 'connect' 

希望有人知道答案。

PS:我使用python 2.7!

-stian

+2

你的問題有點含糊。請包括您所得到的確切錯誤。 –

回答

2

您必須首先創建一個Socket對象:

s = socket.socket() 
s.connect((ip, int(port)) 

代替:

socket.connect(ip, port) 

然後用s.send

3

你打電話.connect()而不是對象。您必須先實例化一個套接字對象,通常通過socket.socket()實現。然後您可以在返回的對象上調用.connect()

s = socket.socket() 
s.connect((ip, int(port)) 
+0

端口是必需的還是可選的? – Stian

+0

當然是必需的。 Python會怎樣知道連接哪個端口?在一些非常罕見的情況下(非TCP/UDP協議),您可能會忽略這一點,但這很可能不適用於您。 –

0

連接調用的參數不應該是一個元組嗎?

socket.connect((ip, port)) 

並檢查send調用的返回值。

另外,除非您收到一些東西,否則您不會知道對方是否關閉連接。接收是瞭解連接是否已關閉的唯一可靠方法。

編輯:和其他人一樣,你必須創建一個套接字對象。

+0

你讀過錯誤嗎? –

+0

@TomvanderWoerdt不,沒有看到編輯,直到我發佈我的答案。但我仍然覺得我提出了幾個好點。 –