连接时接收文件超时

时间:2016-02-18 19:35:17

标签: java android file server client

我制作了一个将文本文件发送到客户端(Android)的服务器,我只是在我连接超时时才收到该文件。

为什么"连接超时"发生在第一位?此外,收到的文件需要1分钟(1MB)。

服务器:

    FileInputStream fis = new FileInputStream(
                                        new File("123.txt");
                                BufferedInputStream bis = new BufferedInputStream(fis);
                                DataInputStream dis = new DataInputStream(bis);

                                byte[] mybytearray = new byte[8192];

                                OutputStream os;
                                try {
                                    os = clientSocket.getOutputStream();
                                    DataOutputStream dos = new DataOutputStream(os);
                                    int read;

                                    while ((read = dis.read(mybytearray)) > 0) {
                                        dos.write(mybytearray, 0, read);

                                    }

                                } catch (IOException e) {
                                    e.printStackTrace();
                                }

客户端:

InputStream in;
                                    int Size = 0;

                                    try {
                                        Size = clientSocket.getReceiveBufferSize();
                                        in = clientSocket.getInputStream();
                                        DataInputStream dis = new DataInputStream(in);
                                        byte[] buffer = new byte[Size];
                                        int read;

                                        while ((read = dis.read(buffer)) > 0) {
                                            fos.write(buffer, 0, read);
                                        }

                                    } catch (IOException e) {
                                        e.printStackTrace();
                                    }

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您不会在服务器端关闭流。所以没有人知道这是流的结束,等待一直持续到超时。像这样添加close():

 os = clientSocket.getOutputStream();
 DataOutputStream dos = new DataOutputStream(os);
 int read;

  while ((read = dis.read(mybytearray)) > 0) {
       dos.write(mybytearray, 0, read);
  }
  os.close();

此外,在客户端,您应该期望零输入。它可以缓慢连接。仅-1表示连接已关闭。改变这样的代码:

while ((read = dis.read(buffer)) > -1)