1

PUT 要求を使用して、HTTP 経由でサーバーの 1 つにビデオをアップロードする非常に単純なアプリケーションを作成しようとしています。私のコードは次のようになります。

socket = new Socket();
socket.connect(new InetSocketAddress(ticket.getHost(), 80));

outputStream = socket.getOutputStream();

// begin forming the request
outputStream.write(("PUT " + ticket.getEndpoint() + " HTTP/1.1\r\n" +
        "Host: " + ticket.getHost() + "\r\n" + 
        "Content-Length: " + getStreamFile().length() + "\r\n" +
        "Content-Type: video/mp4\r\n\r\n").getBytes());

// now, let's write us some binary data
fileInputStream = new FileInputStream(getStreamFile());
inputStream = new BufferedInputStream(fileInputStream);

byte[] fileBytes = new byte[1024];
int bytesRead = 0;
int totalBytesRead = 0;

while ((bytesRead = inputStream.read(fileBytes)) > 0) {
    outputStream.write(fileBytes, 0, bytesRead);

    totalBytesRead += bytesRead;

    notifyListenersOnProgress((double)totalBytesRead / (double)getStreamFile().length());
}

シンプルですね。約2回ループした後、このエラーが表示されるまで:

java.net.SocketException: Broken pipe
    at java.net.SocketOutputStream.socketWrite0(Native Method) ~[na:1.6.0_23]   
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109) ~[na:1.6.0_23]
    at java.net.SocketOutputStream.write(SocketOutputStream.java:141) ~[na:1.6.0_23]

ここで何が間違っていますか?

4

3 に答える 3

0

ソケットの受信側が何らかの理由で接続を閉じました。

于 2012-07-10T02:17:35.857 に答える
0

Don't do this stuff by hand. Use HttpURLConnection for this, that's what it's for. Create a URL, get the HttpURLConnection from it, set the request method to "PUT", set the content-type, don't set the content-length, get the output stream, and start writing.

于 2012-07-10T02:28:15.880 に答える
0

これが問題かどうかはわかりませんが、 の\r\n後に1 秒が欠けていますvideo/mp4

また、配列の最初のバイトwriteのみを書き込むように呼び出しを変更する必要があります。bytesRead

于 2012-07-10T01:57:09.277 に答える