如何在不使用serverSocket的情况下通过wifi将文件发送到另一台设备?

时间:2015-12-12 12:28:32

标签: java android networking

我想使用其IP地址通过wifi将我的文件保存在另一台Android设备的SD卡存储中。这怎么可能?我可以通过知道唯一的IP地址将文件发送到设备。这应该在Android中使用Java以编程方式完成。

我的代码(到目前为止)从Java工作,我们也可以发送文件,但我试过传递字符串:

 class main {
       public static void main(String[] args){
            try {
               String str = "hey sunny";
               byte[] msg = new byte[1024];
               msg        = str.getBytes();

               Socket s = new Socket();
               s.connect(new InetSocketAddress("192.168.1.101",4044));
               DataOutputStream dos=new DataOutputStream(s.getOutputStream());
               dos.write(msg, 0, str.length());
               s.close();
             }
             catch(Exception er) {
                 System.out.println(er.getMessage());
             }
        }
  }

到目前为止,我不想在接收方使用此代码从套接字接收数据,因为我不希望在接收方安装我的应用程序,如:

public class MyActivity extends ActionBarActivity {

private TextView t;
private Button setUp;
private Context context=this;
private Socket clientSocket;
private ServerSocket socket;
String msg;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);
    t     = (TextView)findViewById(R.id.t);
    setUp = (Button)findViewById(R.id.setUpBtn);

    setUp.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new Thread(new Runnable() {
                @Override
                public void run() {

                    try {
                        socket         = new ServerSocket(4044);
                        clientSocket   = socket.accept();
                        InputStream is = clientSocket.getInputStream();
                        byte[] bytes=new byte[1024];
                        int i;
                        ByteArrayOutputStream o = new ByteArrayOutputStream();

                        while ((i = is.read(bytes)) != -1)
                            o.write(bytes,0,i);

                        String s = new String(o.toByteArray(), "UTF-8");
                        msg = s;
                        clientSocket.close();
                        socket.close();
                    }
                    catch (Exception er) {
                        msg="error : - "+er.getMessage();
                    }
                }
            }).start();

            t.setText(msg);
        }
    });
  }
}

1 个答案:

答案 0 :(得分:3)

首先,你应该清楚自己。告诉你到底想要什么。

  • 你的标题说你不想使用serverSocket,为什么不呢?

  • 您想要其他设备的SD卡上的文件,您打算如何做到这一点?你不能只是将文件发送到另一台设备,并认为它会下载你的文件。如果是这种情况,所有手机都将在任何时候被黑客入侵。

如果您没有想到这样的话,那么我认为最好将您的问题更改为:“如何通过wifi将文件存储在另一个Android设备上?”然后确保您的内容包含:

  • 您已经知道的信息

  • 您已经尝试过的事情

嗯,最后,为了回答你的问题,我认为这个人在解释你的问题方面做得很好:

http://android-er.blogspot.nl/2015/01/file-transfer-via-socket-between.html