2012-05-11 127 views
1

我有一個Android應用程序連接到一個Arduino服務器,並按下按鈕發送它的套接字,但只要我按下按鈕它等待一會兒,然後拋出「連接超時」。我知道Arduino的作品;我試過了瀏覽器,它很好。爲什麼我的應用程序無法訪問它?網絡超時異常

Android的代碼:

Button.OnClickListener buttonConnectOnClickListener = new Button.OnClickListener() { 
    public void onClick(View v) { 
     Log.i(Tag,"connecting to Server"); 
     try { 
      Log.i(Tag,"Enters try"); 
      socket = new Socket("161.53.168.112", 8888); 
      Log.i(Tag,"stvorio socket"); 
      dataOutputStream = new DataOutputStream(socket.getOutputStream());//and stream 

      Log.i(Tag,"Writing 1 on socket."); 
      dataOutputStream.writeBytes("1"); 
     } 
     catch (UnknownHostException e) { 
      Log.i(Tag,e.toString()); 
     } 
     catch (IOException e) { 
      Log.i(Tag,e.toString()); 
     } 
     catch (Exception e) { 
      Log.e(Tag, e.toString()); 

這裏是在Arduino的使用的代碼。這很簡單,所以我不明白哪裏出了問題。我用了很多日誌,因爲我想看看錯誤在哪裏。我使用我的Arduino作爲服務器並在其上張貼一些內容。如果我在網絡瀏覽器中輸入161.53.168.112:8888,它會發現它併發送請求,但即使使用瀏覽器,而不是應用程序,我的Android手機也不會收到任何內容。我無法訪問我的服務器。 AM我可能在服務器或Android上缺少一些權限?

byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x36, 0xFF }; 
byte ip[] = { 161, 53, 168, 114 }; 
int serverPort = 8888; 

#define kitchenLight = 9; 

Server server(serverPort); 

void setup() 
{ 
    Serial.begin(9600); 
    Ethernet.begin(mac, ip, gateway, subnet); 
    pinMode(kitchenLight,OUTPUT); 
    server.begin(); 
} 

void loop() 
{ 
    Client client = server.available(); 
    if(client) 
    { 
     while(client.connected()) { 
      if(client.available()) { 
       char c = client.read(); 
       appMessage += c; 
       if (c == '\n') 
       { 
        Serial.println("Message from Client: "+appMessage); 

        if(appMessage.IndexOf("kitchenLight1") != -1) 
        { 
         digitalWrite(kitchenLight,HIGH); 
        } 
       } 
      } 
     } 
    } 
    client.close(); 
} 
+0

發佈您的代碼,並進一步瞭解您的瀏覽器測試...... – FoamyGuy

+0

我在我的問題添加的代碼...... – djedjica

+0

你的意思,它從手機上的瀏覽器的工作原理,但不是從你在手機上創建的應用程序?如果是這樣,請確保您已將Uses Permission INTERNET添加到您的應用程序清單。 – FoamyGuy

回答

0

你讓你的Arduino和Android之間的連接後,你應該添加一個延遲,等等,用於第二個或兩個(更可能二),因爲它需要的是時間的Arduino做好準備接收命令。 希望這有助於:)

+0

謝謝,我會記住這一點! – djedjica

+0

嘗試System.setProperty(「http.keepAlive」,「false」)這將解決您的連接超時問題。 – ashokk