服務器:Python的插座只接受本地連接
import socket
host = ""
port = 4242
backlog = 5
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
s.listen(backlog)
client, address = s.accept()
while 1:
data = client.recv(size)
if data:
client.send(data)
print(data.decode("utf-8"))
客戶:
import socket
import sys
host = sys.argv[1]
port = 4242
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
while True:
line = input("What to say: ")
s.send(line.encode("utf-8"))
好了,我在這裏有點糊塗了。我開始學習套接字,所以我開始使用簡單的echo服務器。我在上面發佈的代碼在服務器運行在Arch Linux或Ubuntu上時運行得非常漂亮。然而,當它在Windows 7上時,它只接受本地連接。事情是,我沒有運行防火牆。我不確定Python是否有單獨的WinSock實現或者什麼,但我很困惑!請,如果你願意,我很清楚,這是非常設計(只接受客戶端!),但我只想知道爲什麼Windows不接受遠程連接。
如果有幫助,在Arch和Ubuntu上,我運行在Python 3.1上,而在Win 7上它運行在3.2上。
當然,我以後每次都想升到更高的水平,但我只是想從低位開始走高。無論如何,我仍然想象Python找到了一種方法來獲得在Windows上工作的標準套接字庫。 – 2011-04-19 01:20:53
是的,但我想''host =「」'會觸發實現的特定行爲,例如在Windows上綁定到''localhost:4242''的套接字,並在Linux上綁定''::4242''。 – Sean 2011-04-19 01:24:26