我今天開始構建一個簡單的客戶機 - 服務器聊天室,我是Python和網絡連接的新手。我犯了這樣的服務器上的一些簡單的代碼:Python套接字錯誤:無法將隱式地將「元組」對象轉換爲str
HOST = socket.gethostname()
PORT = 21238
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
在客戶端:
HOST = socket.gethostbyaddr('54.201.33.XX') #54.201.33.XX is my EC2 public IP
PORT = 21237
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
我已經在服務器上運行我的服務器代碼,當我試圖在我的電腦上運行的客戶端代碼。我得到了錯誤:
Traceback (most recent call last):
s.connect((HOST, PORT))
TypeError: Can't convert 'tuple' object to str implicitly
我發現了一些示例代碼,但nealy所有這些都使用本地主機。感謝您的幫助。
/////
根據@Jon S.的回答。我的客戶端代碼應該是
HOST = '54.201.33.XX'
但仍然超時連接到服務器。我相信我的IP是正確的。
請參閱下面的回答。 [這是一個很好的關於如何使用python進行套接字編程](http://docs.python.org/2/howto/sockets.html),你在服務器上缺少了socket.listen命令。 – Pykler
我有聽方法,但沒有在這裏顯示。現在的問題現在像EC2設置。我發現,服務器端主機名是我的私有IP,但通過打印出主機名在客戶端使用公共IP。你知道我應該在EC2上做些什麼操作嗎? –
我不確定EC2和防火牆,你知道這個端口是否打開。最簡單的測試方法是設置一個簡單的服務器並查看是否可以訪問它。例如'python -m SimpleHTTPServer 21237'並轉到http://54.201.33.XX:21237並查看是否可以訪問它。 – Pykler