TCP视频文件传输

时间:2016-05-10 23:47:25

标签: java sockets tcp

我尝试进行视频文件传输,但是在让服务器开始发送字节时遇到了问题。

第一步是客户端连接,套接字被接受。然后客户端发送视频文件名,但服务器永远不会读取它。

这是服务器的代码,直到它阻止:

 try(ServerSocket serverSocket = new ServerSocket(4005))
    {
        Socket socket = serverSocket.accept();
        System.out.println("accepted");
        OutputStream os = socket.getOutputStream();

        BufferedReader receiveReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        System.out.println("This gets printed");
        String request = receiveReader.readLine();//never passes this line
        System.out.println("This doesn't get printed");

这是客户端直到它阻止等待服务器发送视频字节:

 try(Socket socket = new Socket(IPAddress, 4005))
            {
                byte[] messageBytes = new byte[10000];

                DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());
                outputStream.writeBytes("REQUEST;"+videoPath);//This is the line that should send the bytes for the server to read, so it won't block.

                String home = System.getProperty("user.home");
                String path = home+"\\Downloads" + videoName; 
                path = path.trim();
                FileOutputStream fos = new FileOutputStream(path);
                BufferedOutputStream bos = new BufferedOutputStream(fos);
                InputStream is = socket.getInputStream();

                int bytesRead = 0;
                System.out.println("Downloading file...");
                while((bytesRead = is.read(messageBytes))!=-1)//This blocks here

为什么服务器在读取服务器正在发送的"Request" + videoPath字节时,究竟是什么?我也试过了outputStream.flush(),没有运气。

1 个答案:

答案 0 :(得分:2)

常见问题。你正在阅读一条线,但你不是在写一条线。在发送的消息中添加行终止符。

当你解决这个问题时,你会发现你不能在同一个套接字上混合缓冲的流和阅读器。我建议您通过DataInput/OutputStream类进行所有I / O操作,并使用read/writeUTF()作为名称。

如果您sending multiple files在那里看到我的答案。