私はビデオファイル転送をしようとしていますが、サーバにバイトの送信を開始させるのに問題があります。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()
を試しましたが、運はありません。
答えてくれてありがとうございます、あなたは '' REQUEST ''を意味しますか?+ videoPath'は '' REQUEST '+' + videoPath + ''です。私はあなたの第2段落であなたが何を意味しているかを理解していません。あなたは私がDataOutputStreamを使用した後にFileOutputStreamを使うことができないと言っていますか? – Aequitas
私は* bufferedと言っています*あなたは 'BufferedReader'を使っています。バッファリングされたリーダーを使用して、基本ストリームを直接使用することはできません。 – EJP
申し訳ありませんが、私はそれをどうやって行うのか分かりません。あなたが提案したように新しい行が機能しましたが、今ではビデオを送信するときにファイルが受信側コンピュータで再生されません。私はこれがあなたが暗示した問題のためかもしれないと思いますか?この例では、バッファリングされたストリームのデータ入力ストリームを使用するようにリンクしています。 – Aequitas