通过套接字连接发送数据

时间:2017-04-06 07:48:04

标签: java android sockets android-studio file-transfer

我正在做一个Android应用程序,我必须设置一个功能,如ShareIt发送和从一个设备接收文件到其他设备。 我能够做到但我必须从接收端手动再次调用接收方法。 我想询问如何在选择文件后发件人点击发送按钮时自动判断或启动套接字的接收方法。

default_subtypes = self.env['mail.message.subtype'].search([  ('default', '=', True),      '|', ('res_model', '=', model_id), ('res_model', '=', False)])
vals['message_follower_ids'] = [(0,0,{
          'res_model':model_id,
          'subtype_ids': [(6, 0, default_subtypes.ids)],
          'partner_id':pid}) for pid in partner_id]
return vals;

在按钮上单击接收端,我通过此线程与发件人IPAddress和端口号建立套接字连接。

  buttonConnect.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            Log.e("asdfd", IP_ADDRESS);
             clientRxThread =
                    new ClientRxThread(
                            IP_ADDRESS,
                            SocketServerPORT);

            clientRxThread.start();
        }});
}

这是我建立连接并从该线程调用receive方法的线程。

 private class ClientRxThread extends Thread {
    String dstAddress;
    int dstPort;

    ClientRxThread(String address, int port) {
        dstAddress = address;
        dstPort = port;
    }

    @Override
    public void run() {


            try {
                socket = new Socket(dstAddress, dstPort);
                socket.setReuseAddress(true);
                receive(socket);
                RecieveActivity.this.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        Toast.makeText(RecieveActivity.this,
                                "Finished",
                                Toast.LENGTH_LONG).show();
                    }
                });

            } catch (IOException e) {

                e.printStackTrace();

                final String eMsg = "Something wrong: " + e.getMessage();
                RecieveActivity.this.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        Toast.makeText(RecieveActivity.this,
                                eMsg,
                                Toast.LENGTH_LONG).show();
                    }
                });

            } finally {
                if (socket != null) {
                    try {
                        socket.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
    }
}

以下是我保存从发件人端发送的文件的接收方法。

任何帮助将不胜感激。在此先感谢。

0 个答案:

没有答案