5

コードを作成していて、mp4 ファイルを別の Android デバイスに送信したいと考えています。両方の Android を Wifi 経由で接続し、一方から 1 から 20 までの単純なサイクルを書き込み、もう一方の Android デバイスが送信された番号を読み取って表示するようになりました。

ここに「送信者」の興味深い部分があります。

                InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
                Log.d("ClientActivity", "C: Connecting...");
                Socket socket = new Socket(serverAddr, port);
                connected = true;
                while (connected) {
                    try {
                        Log.d("ClientActivity", "C: Sending command.");
                        PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
                                    .getOutputStream())), true);


                        for (int i = 1; i < 20; i++) {


                            out.println(i);

                            i=i++;

そして「レシーバー」:

serverSocket = new ServerSocket(SERVERPORT);

                        // listen for incoming clients
                        Socket client = serverSocket.accept();
     BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()),8*1024);

これはうまくいきます!しかし、int ではなく、あるデバイスから別のデバイスにファイルを送信したいと考えています。これどうやって作るの?????

4

2 に答える 2

1

ある種のデータ形式を使用して、データをストリームにパッケージ化する必要があります。これを行う 1 つの方法は、電子メールで添付ファイルを送信するために一般的に使用される一般的な MIME データ形式を使用することです。

次のSO Question - android add filename to bytestream で、この形式を使用してソケット経由でバイナリを送信することに関連する他の質問に答えました。その質問に対して受け入れられた回答を確認できます。

ご参考までに、以下の質問からソケットを介して送受信するためのコードをコピーしました。

File  f = new File(path);
BufferedOutputStream out = new BufferedOutputStream( socket.getOutputStream() );
String filename=path.substring(path.lastIndexOf("/")+1);

// create a multipart message
MultipartEntity multipartContent = new MultipartEntity();

// send the file inputstream as data
InputStreamBody isb = new InputStreamBody(new FileInputStream(f), "image/jpeg", filename);

// add key value pair. The key "imageFile" is arbitrary
multipartContent.addPart("imageFile", isb);

multipartContent.writeTo(out);
out.flush();
out.close();

そして、JavaMail の一部であるMimeBodyPartを使用して以下に読み返すコード。


MimeMultipart multiPartMessage = new MimeMultipart(new DataSource() {
    @Override
    public String getContentType() {
        // this could be anything need be, this is just my test case and illustration
        return "image/jpeg";
    }

    @Override
    public InputStream getInputStream() throws IOException {
        // socket is the socket that you get from Socket.accept()
        BufferedInputStream inputStream = new BufferedInputStream(socket.getInputStream());
        return inputStream;
    }

    @Override
    public String getName() {
        return "socketDataSource";
    }

    @Override
    public OutputStream getOutputStream() throws IOException {
        return socket.getOutputStream();
    }
});

// get the first body of the multipart message
BodyPart bodyPart = multiPartMessage.getBodyPart(0);

// get the filename back from the message
String filename = bodyPart.getFileName();

// get the inputstream back
InputStream bodyInputStream = bodyPart.getInputStream();

// do what you need to do here....
于 2011-10-04T16:19:20.543 に答える
0

Google によってリリースされたオープン ソース プロジェクトがあり、それを見て、デバイスの接続とデバイス間でのファイル共有に関する一般的なアイデアを得ることができます。

リンクは次のとおりです:android-fileshare

于 2012-03-03T21:32:52.120 に答える