为什么我的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;
        }

        @Override
        protected void onPostExecute(Boolean result)
        {
            isConnected = result;
            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);
            }
        }
    }

}

并且此片段将启动连接并发送数据(通过调用sendDataToServer(String text)方法)。

LogIntoServer.java

public class LogIntoServer extends Fragment {

    private EditText ipadr,portadr;
    private Button connect,disconnect;
    ServerConnection serverConnection;
    String SERVER_IP ;
    String SERVER_PORT;
    PrintWriter out;


    public LogIntoServer() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_log_into_server, container, false);
        ipadr      = v.findViewById(R.id.ipadr);
        portadr    = v.findViewById(R.id.portadr);
        connect    = v.findViewById(R.id.connect);
        disconnect = v.findViewById(R.id.disconnect);

        serverConnection = new ServerConnection();
        connect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                 SERVER_IP = ipadr.getText().toString();
                 SERVER_PORT = portadr.getText().toString();
                 serverConnection.startConnection(SERVER_PORT , SERVER_IP);
                 serverConnection.sendDataToServer("Connection Successful");
            }
        });

        disconnect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                serverConnection.sendDataToServer("exit");
            }
        });

        return v;
    }

}

如果我双击连接按钮,则它将仅发送一次“连接成功”。请帮忙。

马丁·齐特勒

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

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

在套接字状态更改时将其设置为truefalse

则不再需要单击按钮的频率了。

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

围绕着的额外课程AsyncTask也很混乱;

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

您得到了一些OutputStreamWriter但从未写入流中;

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我的formdata.append没有将键值对发送到服务器?

为什么我的表单中的选择输入字段没有发送到服务器?

我无法将数据发送到服务器,也不能,也没有从服务器接收数据

为什么cookie没有发送到服务器

XMLHttpRequest 没有将 POST 数据发送到 Django 服务器

为什么我的ajax调用仅处理我发送到服务器的部分数据?

为什么 cookie 没有通过 Next.js 中的 getServerSideProps 发送到服务器?

为什么我无法将POST登录信息发送到Spritg身份验证服务器?

为什么TCP数据包从我的电脑发送到EdgeCast Networks,Inc.拥有的服务器?

为什么POST方法将两次表单数据发送到服务器?

如何在没有jquery的情况下使用ajax将数据发送到节点服务器?

没有网络时-将数据保存到sqlite并在网络恢复后发送到服务器

我想将数据发送到本地服务器

将listview中的所有数据发送到服务器的最佳方法是什么?

无法将数据发送到libwebsocket服务器

Android将数据发送到服务器问题

将数据从服务器发送到Android设备

齐射无法将数据发送到服务器

将大型画布数据发送到服务器

将JSON数据发送到Laravel服务器

JavaPNS为什么将生产推送消息发送到沙盒服务器?

为什么将XMLHttpRequest中的对象发送到Node / Express服务器为空?

我没有看到添加的 cookie。它不会发送到服务器

将修改的数据发送到服务器(带有计时器)

html select元素将值发送到没有值属性的服务器

即使没有位置更改,也将位置更新发送到服务器

如何触发应用程序将数据发送到我的服务器?

我可以使用ViewModel将数据发送到服务器吗?

将图像发送到我的服务器的方式有哪些?