Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android应用程序中的持久TCP客户端doens´;无法接收数据_Android_Tcpclient - Fatal编程技术网

Android应用程序中的持久TCP客户端doens´;无法接收数据

Android应用程序中的持久TCP客户端doens´;无法接收数据,android,tcpclient,Android,Tcpclient,我有一个ESP8266 12F,处于软AP模式(服务器),并试图以持久模式(TCP)将我的Android应用程序连接到它 我正在尝试使用这段代码,我可以发送数据但无法收到答案,我知道答案正在发送,因为我正在嗅探ESP8266连接 目标是针对ESP8266启动TCP客户端连接,并根据应用程序中按下的按钮向其发送数据包,物联网设备可能正忙着应答,因此我迫不及待地停止应用程序GUI;这就是为什么我需要一个持久的连接 我尝试了不同的方法,但没有成功 package com.coolio.tcptest;

我有一个ESP8266 12F,处于软AP模式(服务器),并试图以持久模式(TCP)将我的Android应用程序连接到它

我正在尝试使用这段代码,我可以发送数据但无法收到答案,我知道答案正在发送,因为我正在嗅探ESP8266连接

目标是针对ESP8266启动TCP客户端连接,并根据应用程序中按下的按钮向其发送数据包,物联网设备可能正忙着应答,因此我迫不及待地停止应用程序GUI;这就是为什么我需要一个持久的连接

我尝试了不同的方法,但没有成功

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()如果你在每次命令后关闭客户端,你就没有永久的连接。不,你根本没有提到这个。一言不发。这些都是新信息。