为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁花如伊 2021-10-17 15:57:52
我正在开发一个 Android 应用程序。Android 应用程序(客户端)将与 pc(服务器)连接并共享数据。现在我可以成功建立连接但我无法发送数据。这是我的 Java 文件,其中包含建立连接和发送数据的所有逻辑。ServerConnection.javapublic 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)方法)。
查看完整描述

1 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

将这些字段添加到AsyncTask; 甚至可能是static

private boolean isConnecting = false;
private boolean isConnected = false;

并将这些设置为truefalse,每当套接字状态发生变化时

那么不再重要了,按钮被点击的频率。

来自的代码sendDataToServer()应该可能运行onPreExecute()

周围的额外班级AsyncTask也是一团糟;

更好地直接构建它 - 使用 IP、端口和消息。

你有一些OutputStreamWriter但从未写入流;

除此之外几乎没有任何onPostExecute代码。


查看完整回答
反对 回复 2021-10-17
  • 1 回答
  • 0 关注
  • 191 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信