2012-08-08 137 views
0

我一直在試圖獲得我的服務器和手機之間的基本套接字連接。下面的代碼完美地適用於Android模擬器,但是當我在手機上試用時,它失敗了,我不知道爲什麼。我已經嘗試了大部分我可以在SO和Google上找到的建議,但都沒有成功。Android套接字建立連接,但不發送或接收

我的服務器代碼只是一些基本的Ruby: 需要 '插座'

server = TCPServer.new 2000 

puts 'Server started!' 
loop do 
Thread.start(server.accept) do |client| 
puts "Received client" 

client.write "Connection established." 

    while text = client.gets 
     puts text 
     client.puts text # Just echo the result back... 
    end 

    client.close 
    end 
end 

而我的客戶端代碼如下: 公共無效的onCreate(捆綁savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

try{ 
     Socket s = new Socket("***", 2000); 

     BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream())); 

     PrintWriter out = new PrintWriter(s.getOutputStream()); 

     out.println("test\r\n"); 
     out.flush(); 
     out.close();    


    }catch(Exception e){ 

    } 

} 

代碼返回模擬器上的預期的響應:

Server started! 
Received client 
test 

但是,當我在我的手機上運行它,它只返回:

Server started! 
Received client 

顯然,這是建立連接。我有一些我寫的更深入的代碼,也寫回到服務器,再次,仿真器寫入&接收,但我的手機不,一段時間後,我的手機報告:「連接關閉對等。」

任何想法都會很棒!

編輯:好像我的朋友的手機上運行......所以現在我更爲難......我使用的是索尼的Xperia

回答

0

原因是載波MTN上的端口2000存在問題。用另一個端口解決了我的問題。

0

你永遠讀從輸入流中的任何輸入,所以它只是在等待。也許你想要做的是在你的緩衝閱讀器上調用readLine()。也許在輸入流代碼之前放置輸出流代碼。

相關問題