繁体   English   中英

通过套接字发送和接收照片错误

[英]Wrong sending and receiving photos through socket

这是客户端代码(Android应用程序):

Socket mSocket = new Socket();
mSocket.connect(new InetSocketAddress("123.456.789.0", 50), 10000);
BufferedReader in = new BufferedReader(new InputStreamReader(mSocket.getInputStream()));
OutputStream out = mSocket.getOutputStream();
out.write("image number 3".getBytes("UTF-8"));
out.flush();
FileInputStream mFileInputStream = new FileInputStream(mFile); // mFile - photo
while (true) {
    byte[] i3 = new byte[65536];
    int i4 = mFileInputStream.read(i3, 0, 65536);
    if (i4 < 0) {
        mFileInputStream.close();
        break;
    } else {
        out.write(i3, 0, i4);
        out.flush();
    }
}

这段代码是服务器:

BufferedReader in = new BufferedReader(new InputStreamReader(this.in, "UTF-8"));
String i1 = in.readLine();
ByteArrayOutputStream i3 = new ByteArrayOutputStream();
while (true) {
    try {
        byte[] i4 = new byte[1024];
        int i5 = this.in.read(i4, 0, 1024);
        if (i5 < 0) {
            throw new Exception();
        } else {
            i3.write(i4, 0, i5);
            i3.flush();
        }
    } catch (Exception e1) {
        i3.close();
        break;
    }
}
BufferedImage mBufferedImage = ImageIO.read(new ByteArrayInputStream(i3.toByteArray()));

当我尝试在服务器上发送照片然后使用ImageIO读取照片时,几乎有1/4倍的时间出现异常:

java.lang.NullPointerException

在com.lnproduction.ru.gks.server.I1 $ WebClient.run(I1.java:101)

在java.lang.Thread.run(未知来源)

第101行: BufferedImage mBufferedImage = ImageIO.read(new ByteArrayInputStream(i3.toByteArray())); 我还使用了调试器,它显示了:实际上,它发送了116K字节但收到了113K的1/4倍! 我真的不明白这是有可能的。 也许我的代码有一些错误? 请帮我解决。 没主意对不起!

您不能在同一套接字上混合使用缓冲流和非缓冲流。 您正在缓冲的读取器中丢失部分图像。 尝试仅使用DataInputStreamDataOutputSream ,并通过writeUTF()/readUTF()发送文件名。

暂无
暂无

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

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