更新: 謝謝你的想法。我已經調試了我相信到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>
Android的代碼看起來很好劃分您的問題。可能是服務器代碼的問題。 – njzk2
AsyncTask可能會導致添加問題。嘗試使用線程和處理程序 –
每次您要發送消息時都要進行套接字連接,爲什麼不考慮在「Intent服務」中創建套接字連接並保持活動狀態直到您明確關閉連接。 –