猿问

为什么我的 PrintWriter 没有向服务器发送数据?

我正在开发一个 Android 应用程序。Android 应用程序(客户端)将与 pc(服务器)连接并共享数据。现在我可以成功建立连接但我无法发送数据。这是我的 Java 文件,其中包含建立连接和发送数据的所有逻辑。


ServerConnection.java


public class ServerConnection  {


    private static  int SERVER_PORT = 1100;

    private static  String SERVER_IP = "192.168.43.7";

    private boolean isConnected=false,connectionDone=false;

    private boolean mouseMoved=false;

    Context context;

    private Socket socket;

    private PrintWriter out;


    public void startConnection(String port , String ip){

        SERVER_IP = ip.toString();


        ConnectPhoneTask connectPhoneTask = new ConnectPhoneTask();

        connectPhoneTask.execute(SERVER_IP);

    }



    public void sendDataToServer(String text){

        try {

            if(isConnected) {

                out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); //create output stream to send data to server


            }

        }catch (IOException e){

            Log.e("remotedroid", "Error while creating OutWriter", e);

            Toast.makeText(context, "Error: while creating OutWriter "+e, Toast.LENGTH_LONG).show();

        }

        if(out!=null){

            out.println(text);

        }

        else{

            Log.e("check" , "Something is wrong here");

        }

    }


    public class ConnectPhoneTask extends AsyncTask<String,Void,Boolean> {


        @Override

        protected Boolean doInBackground(String... params) {

            boolean result = true;


            try {

                InetAddress serverAddr = InetAddress.getByName(params[0]);

                socket = new Socket(serverAddr, SERVER_PORT);//Open socket on server IP and port


            } catch (IOException e) {

                Log.e("remotedroid", "Error while connecting", e);

                result = false;

            }

            return result;

        }


这个片段将发起连接并发送数据(通过调用sendDataToServer(String text)方法)。


繁花如伊
浏览 196回答 1
1回答

蝴蝶刀刀

将这些字段添加到AsyncTask;&nbsp;甚至可能是static:private&nbsp;boolean&nbsp;isConnecting&nbsp;=&nbsp;false; private&nbsp;boolean&nbsp;isConnected&nbsp;=&nbsp;false;并将这些设置为true&&nbsp;false,每当套接字状态发生变化时那么不再重要了,按钮被点击的频率。来自的代码sendDataToServer()应该可能运行onPreExecute()。周围的额外班级AsyncTask也是一团糟;更好地直接构建它 - 使用 IP、端口和消息。你有一些OutputStreamWriter但从未写入流;除此之外几乎没有任何onPostExecute代码。
随时随地看视频慕课网APP

相关分类

Java
我要回答