2016-07-04 68 views
0

更新: 謝謝你的想法。我已經調試了我相信到android到ESP8266之間的連接的問題。我相信ESP有可能會發生什麼事情,因爲當我將android連接到我的電腦時,它似乎連接並工作良好。有一些非常小的延遲,但沒有像連接到ESP那樣。因此,我認爲ESP正在造成延遲。這是說我不知道​​什麼可能導致這一點。我曾嘗試在Arduino IDE 1.6.8中使用ESP8266 2.3.0版本的庫,但似乎無法弄清楚爲什麼會出現延遲。我沒有將android應用程序連接到我的內部路由器,然後發送到PC,沒有問題。但是它似乎不適用於ESP。我不能相信我是唯一一個看到這個......如果其他人有這個工作,請讓我知道你是如何做到的。我永恆的感激之情就是你的。Android Java套接字延遲發送數據

下面是ESP的Arduino代碼:

WiFiServer server(2390); // TCP/IP 
SoftwareSerial mySerial(4, 5); // RX, TX 
void setup() 
{ 
    Serial.begin(115200); 
    WiFi.mode(WIFI_STA); 
    WiFi.softAP("mySSID", "myPASS"); 

    server.begin();// START TCP/IP SERVER 
} 
WiFiClient client; 
void loop() 
{ 
    if (client) 
    { 
     while (client.connected()) 
     { 
      if (client.available()) 
      { 
       char command = client.read(); 
       Serial.println(itoa(command,buffer,10)); 
      } 
     } 
    } 
    else 
    { 
     client = server.available(); 
    } 
} 

我試圖採用了android(Java)和ESP8266之間的TCP/IP套接字來獲得幾乎瞬時的通信。我看到的問題是,當我按下按鈕到android實際發送數據時,會出現明顯的延遲。當我點擊Go按鈕時,它似乎有時發送正確,但在第一次發送後不會發送5-10秒。當它卡住時,我點擊Go按鈕多次,在延遲之後,他們似乎立即發送或開始發送。我查看了Android Studio中的網絡監視器,從點擊按鈕直到流量顯示在「監視器」選項卡中的網絡面板上,延遲時間就會顯現。

我正在使用Android Studio調試器來測試代碼。

有沒有什麼我不正確的做法?或者,對於設備之間的即時通信有更好的實現嗎?

感謝您提前給予的幫助!

Android設備: 三星注4 - V5.1.1安卓2.0

Android Studio中

ESP設備: ESP8266使用Arduino的工作室1.6.8

這裏是我的代碼:

public class MainActivity extends AppCompatActivity 
{ 
    private Socket socket; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    public void onClick(View view) 
    { 
     try 
     { 
      new AsyncTaskRunner().execute(""); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    private class AsyncTaskRunner extends AsyncTask<String, String, String> 
    { 
     private String resp; 
     ProgressDialog progressDialog; 

     @Override 
     protected String doInBackground(String... params) 
     { 
      try 
      { 
       DataOutputStream dataOut; 
       Socket s = new Socket("192.168.4.1", 2390); 

       dataOut=new DataOutputStream(s.getOutputStream()); 
       byte[] outputData = new byte[9]; 
       outputData[0] = 1; 
       outputData[1] = 2; 
       outputData[2] = 3; 
       outputData[3] = 4; 
       outputData[4] = 5; 
       outputData[5] = 6; 
       outputData[6] = 7; 
       outputData[7] = 8; 
       outputData[8] = 9; 
       dataOut.write(outputData); // Red 
       dataOut.flush(); 
       dataOut.close(); 
       s.close(); 
      } 
      catch (UnknownHostException e) 
      { 
       e.printStackTrace(); 
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 

      return resp; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
     } 

     @Override 
     protected void onProgressUpdate(String... text) { 
     } 
    } 
} 

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.jered.networktest.MainActivity"> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Go" 
     android:onClick="onClick"/> 

</RelativeLayout> 
+0

Android的代碼看起來很好劃分您的問題。可能是服務器代碼的問題。 – njzk2

+0

AsyncTask可能會導致添加問題。嘗試使用線程和處理程序 –

+1

每次您要發送消息時都要進行套接字連接,爲什麼不考慮在「Intent服務」中創建套接字連接並保持活動狀態直到您明確關閉連接。 –

回答

0

我不認爲任何人都可以肯定地說問題出在哪裏。 爲了防止你(及其他)從追鬼,你真的想分手了你的問題:

  • 確保您的「doInBackground」不延遲,例如通過登錄到Android日誌記錄系統,控制檯,調試器,或在UI中做一些簡單的事情。
  • 確保在Android端的發送不會延遲,例如在微軟寫一個微小的監聽器。 Java,並在PC上運行它。
  • 通過在Java中創建一個微小的發件人並在PC上運行它,確保不會延遲收聽。

這樣,直到你找到問題的根源:)