0

客户端将文件发送到服务器,服务器接收并保存它。但是,当在客户端中出现 Line(while ((len = outputFromServer.read(buf)) != -1)) 时,客户端卡住了,我不知道为什么?尝试 {

            Log.d(WiFiDirectActivity.TAG, "Opening client socket - ");

            socket.connect((new InetSocketAddress(host, port)),
                    SOCKET_TIMEOUT);

            final File f = new File(
                    Environment.getExternalStorageDirectory()
                            + "/wifip2pshared-"
                            + System.currentTimeMillis() + ".jpg");

            File dirs = new File(f.getParent());
            if (!dirs.exists())
                dirs.mkdirs();
            f.createNewFile();

            // send Data To Server
            OutputStream stream = socket.getOutputStream();
            FileInputStream file = new FileInputStream(
                    "/sdcard/samsung/Image/001" + ".jpg");
            while ((len1 = file.read(buf1)) != -1) {
                stream.write(buf1, 0, len1);
            }
            file.close();
            // ////////////////////////////////
            // ///////////////////////
            // read Data from server
            InputStream outputFromServer = socket.getInputStream();
            FileOutputStream saveData = new FileOutputStream(
                    f);
            while ((len = outputFromServer.read(buf)) != -1) {
                saveData.write(buf, 0, len);
            }
            saveData.close();

            Log.d(WiFiDirectActivity.TAG, "Client: Data written");
        } catch (IOException e) {
            Log.e("exception at client", e.getMessage());
        } finally {
            if (socket != null) {

                if (socket.isConnected()) {
                    try {
                        socket.close();
                    } catch (Exception e) {
                        // Give up
                        Log.e("exception at clientin socket close",
                                e.toString());
                    }
                }
            }
        }

服务器端

try {
            server = new ServerSocket(8988);
            Socket client = server.accept();
            final File f = new File(
                    Environment.getExternalStorageDirectory()
                            + "/wifip2pshared-"
                            + System.currentTimeMillis() + ".jpg");

            File dirs = new File(f.getParent());
            if (!dirs.exists())
                dirs.mkdirs();
            f.createNewFile();

            // receive Data From Client
            InputStream is = client.getInputStream();
            FileOutputStream fos = new FileOutputStream(f);
            String a = "acb";
            while ((len = is.read(buf)) != -1) {
                fos.write(buf, 0, len);
                Log.e("In server reviving data", a);
            }
            fos.close();
            // Send Data To Client
            OutputStream stream = client.getOutputStream();

            FileInputStream file = new FileInputStream(
                    "/sdcard/samsung/Image/001" + ".jpg");
            while ((len1 = file.read(buf1)) != -1) {
                stream.write(buf1, 0, len1);
            }
            file.close();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

客户端将文件发送到服务器,服务器接收并保存它。但是,当在客户端中出现 Line(while ((len = outputFromServer.read(buf)) != -1)) 时,客户端卡住了,我不知道为什么?

4

1 回答 1

1

read()仅当连接关闭或发生错误时,套接字流才会返回 -1。服务器接收数据并保存它,但永远不会离开接收器循环来发送数据。即使它会这样做,客户端也不会离开它的接收器循环。

您必须在实际文件之前关闭连接或发送文件大小,并且在读取给定大小时停止接收。

于 2013-06-16T18:51:24.503 回答