更新: 谢谢你的想法。我已经调试了我相信到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服务”中创建套接字连接并保持活动状态直到您明确关闭连接。 –