我正在爲Android製作聊天應用程序,目前正在使用2個仿真器和通過USB連接的手機進行測試。 在過去的24小時內,我還沒有能夠獲得一個Socket來連接ServerSocket。每臺主機都使用ServerSocket爲了通過其客戶端套接字來監聽其他主機的「談話」。ServerSocket正在使用IP/::
對於這兩個仿真器,代碼打印出來的以下2行: The server socket is using ip: /::
serverSocket = new ServerSocket(portNo);
Log.i("MY_TAG", "The server socket is using ip: " + serverSocket.getInetAddress());
使用下面的代碼行,我得到一個ConnectionException說,它不能連接到指定的IP和端口,該連接超時:
socket = new Socket(addr, portNo);
我獲取IP的方式是通過查詢約每20秒的服務器,並在一個PHP腳本,我用$_SERVER['REMOTE_ADDR']
這確實是我回IP地址。
當使用手機發送消息給模擬器,我得到一個稍微不同的錯誤。和仿真器一樣,我得到一個ConnectionException,除了它還說「連接被拒絕」。
當把從模擬器到手機的消息,我得到一個ConnectionException由於超時。
手機的ServerSocket的使用IP 0.0.0.0這是我所知道的是很好,因爲這意味着它只是偵聽所有接口。
在所有情況下,服務器套接字的accept()方法都不會返回。
使用netstat -an
(我正在使用Windows作爲我的操作系統),我沒有看到我的ServerSockets在輸出中列出的任何端口。
使用telnet,試圖在仿真器(使用PHP的$_SERVER['REMOTE_ADDR']
要獲取IP)時,我得到一個連接被拒絕的消息。
當在手機的IP和偵聽端口上使用telnet時,我會收到連接超時。
這就是說,請幫我弄清楚如何讓這些插座連接。
是您的Web服務運行? – 2015-02-06 09:29:44
是的。我可以看到我的數據庫中的每個用戶都會更新IP地址和端口。大約每20秒鐘一次,用戶使用他們的IP和端口更新這個數據庫,同時檢索他們所有朋友的IP和端口。 – Kacy 2015-02-06 09:39:41
'每臺主機都使用一個ServerSocket來通過客戶端套接字來監聽其他主機的「通話」。對不起,我不明白你的設置。什麼是'主人'。對我來說,使用多於一個的服務器端口看起來不是一個好主意。你爲什麼需要這個?重新思考你的設計。 – greenapps 2015-02-06 11:13:31