繁体   English   中英

TCP视频文件传输

[英]TCP Video file transfer

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

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

这是服务器阻塞之前的代码:

 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为什么服务器没有读取服务器正在发送的"Request" + videoPath字节? 我也尝试了outputStream.flush() ,不走运。

常见问题。 您正在读一行,但是您不在写一行。 将行终止符添加到已发送的消息。

修复此问题后,您将发现无法在同一套接字上混合使用缓冲的流和读取器。 我建议您通过使用read/writeUTF()作为名称的DataInput/OutputStream类来完成所有I / O。

如果您要发送多个文件,请在此处查看我的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM