Android应用程序中的持久TCP客户端doens´;无法接收数据
我有一个ESP8266 12F,处于软AP模式(服务器),并试图以持久模式(TCP)将我的Android应用程序连接到它 我正在尝试使用这段代码,我可以发送数据但无法收到答案,我知道答案正在发送,因为我正在嗅探ESP8266连接 目标是针对ESP8266启动TCP客户端连接,并根据应用程序中按下的按钮向其发送数据包,物联网设备可能正忙着应答,因此我迫不及待地停止应用程序GUI;这就是为什么我需要一个持久的连接 我尝试了不同的方法,但没有成功Android应用程序中的持久TCP客户端doens´;无法接收数据,android,tcpclient,Android,Tcpclient,我有一个ESP8266 12F,处于软AP模式(服务器),并试图以持久模式(TCP)将我的Android应用程序连接到它 我正在尝试使用这段代码,我可以发送数据但无法收到答案,我知道答案正在发送,因为我正在嗅探ESP8266连接 目标是针对ESP8266启动TCP客户端连接,并根据应用程序中按下的按钮向其发送数据包,物联网设备可能正忙着应答,因此我迫不及待地停止应用程序GUI;这就是为什么我需要一个持久的连接 我尝试了不同的方法,但没有成功 package com.coolio.tcptest;
package com.coolio.tcptest;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import java.net.*;
import java.io.*;
public class ClientActivity extends AppCompatActivity {
Socket myClient = new Socket();
Boolean Connected = false;
String serverName;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_client);
}
public class client extends AsyncTask<Void,Void,Void>
{
String received;
protected Void doInBackground(Void... Params)
{
//String serverName = "10.7.48.108";
int port = 1100;
try {
//updateText.setText("Connecting to " + serverName + " on port " + port);
// Socket client = new Socket(serverName, port);
if(!Connected)
{
//myClient.addListener();
myClient = new Socket(serverName, port);
myClient.setTcpNoDelay(true);
//myClient.on("new message", onNewMessage);
Connected=true;
}
//updateText.setText("Just connected to " + client.getRemoteSocketAddress());
OutputStream outToServer = myClient.getOutputStream();
DataOutputStream out = new DataOutputStream(outToServer);
InputStream inFromServer = myClient.getInputStream();
DataInputStream in = new DataInputStream(inFromServer);
out.writeBytes("Connected!\r\n");
received = in.readUTF();//Stuck here
myClient.close();
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void aVoid)
{
//Never reach here
TextView updateText = (TextView) findViewById(R.id.update);
updateText.setText("in post");
TextView receivedText = (TextView) findViewById(R.id.received);
receivedText.setText("Server says: " + received);
}
}
public void onSendClicked(View view)
{
//EditText messageView= (EditText) findViewById(R.id.ip);
//serverName=messageView.getText().toString();
serverName="192.168.4.1";
new client().execute();
}
}
package com.coulio.tcptest;
导入android.os.AsyncTask;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.TextView;
导入java.net。*;
导入java.io.*;
公共类ClientActivity扩展了AppCompatActivity{
Socket myClient=new Socket();
布尔连接=假;
字符串serverName;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u客户端);
}
公共类客户端扩展异步任务
{
收到字符串;
受保护的Void doInBackground(Void…参数)
{
//字符串serverName=“10.7.48.108”;
int端口=1100;
试一试{
//setText(“连接到端口“+端口上的“+serverName+”);
//套接字客户端=新套接字(服务器名、端口);
如果(!已连接)
{
//myClient.addListener();
myClient=新套接字(服务器名、端口);
myClient.setTcpNoDelay(true);
//myClient.on(“新消息”,onNewMessage);
连接=真;
}
//updateText.setText(“刚刚连接到”+client.getRemoteSocketAddress());
OutputStream outToServer=myClient.getOutputStream();
DataOutputStream out=新的DataOutputStream(outToServer);
InputStream INFOROMSERVER=myClient.getInputStream();
DataInputStream in=新的DataInputStream(INFORMServer);
out.writeBytes(“已连接!\r\n”);
received=in.readUTF();//卡在这里
myClient.close();
}
捕获(IOE异常)
{
e、 printStackTrace();
}
返回null;
}
受保护的void onPostExecute(void避免)
{
//永远不要到这里
TextView updateText=(TextView)findViewById(R.id.update);
updateText.setText(“在post中”);
TextView receivedText=(TextView)findViewById(R.id.received);
receivedText.setText(“服务器说:“+received”);
}
}
已单击结束时的公共无效(视图)
{
//EditText messageView=(EditText)findViewById(R.id.ip);
//serverName=messageView.getText().toString();
serverName=“192.168.4.1”;
新客户端().execute();
}
}
因此我迫不及待地停止应用程序GUI;这就是我需要持久连接的原因。
?所有数据传输都必须在线程中完成。因此,甚至不可能阻止gui。你是什么意思?可能你的代码挂起在readUTF()上。esp是否发送utf字符串?首先,您没有向esp发送utf字符串。请显示接收连接字符串的esp代码,然后发送回复。@blackapps我说的是套接字无法添加侦听器“myClient.addListener();”或异步获取事件的方法。myClient.close()代码>如果你在每次命令后关闭客户端,你就没有永久的连接。不,你根本没有提到这个。一言不发。这些都是新信息。