当前位置: 代码迷 >> J2SE >> 利用socket发送数据的有关问题
  详细解决方案

利用socket发送数据的有关问题

热度:10013   发布时间:2013-02-25 00:00:00.0
利用socket发送数据的问题
这几天在写PC端和手机端的远程监控,我现在写到截获PC端摄像头的数据并得到BufferedImage,然后利用ImageIO写到socket的输出流里面,然后在客户端(我先在PC端写的客户端,没有在安卓手机端)里从socket里得到输入流,在用ImageIO写到硬盘里,可是只能写入成功一张图片,然后就会出
Java code
java.net.SocketException: Connection reset by peer: socket write error    at java.net.SocketOutputStream.socketWrite0(Native Method)    at java.net.SocketOutputStream.socketWrite(Unknown Source)    at java.net.SocketOutputStream.write(Unknown Source)    at java.io.BufferedOutputStream.flushBuffer(Unknown Source)    at java.io.BufferedOutputStream.write(Unknown Source)    at java.io.DataOutputStream.writeInt(Unknown Source)    at ss.snow.service.ImageSend$Worker.run(ImageSend.java:91)

这个问题,如果不发送,只是在服务端直接保存到硬盘里可以连续保存。求大神帮忙,现贴代码如下:
服务端:
Java code
private class Worker extends Thread {        private final int[] data = new int[320 * 240];        private FrameGrabbingControl sendFrame;        private Buffer buffer;        private BufferToImage image;        private BufferedImage sendImage;        private ServerSocket ss;        private Socket socket;        private OutputStream outStream;        private boolean isRunning = false;        private DataOutputStream dos;        @Override        public void run() {            try {                ss = new ServerSocket(8000);            } catch (IOException e1) {                e1.printStackTrace();            }            try {                isRunning = true;                while (isRunning) {                    boolean isConnected = false;                    socket = ss.accept();                    outStream = socket.getOutputStream();                                        System.out.println("有客户端连接");                    isConnected = true;                    while (isConnected) {                        sendFrame = control;                        buffer = sendFrame.grabFrame();                        image = new BufferToImage((VideoFormat) buffer.getFormat());                                                                        sendImage = (BufferedImage) image.createImage(buffer);                        /*                        sendImage.getWritableTile(0, 0).getDataElements(0, 0,                                320, 240, data);                        sendImage.releaseWritableTile(0, 0);                        dos = new DataOutputStream(new BufferedOutputStream(outStream));                        for(int i = 0; i < data.length; i++) {                            dos.writeInt(data[i]);                        }                        dos.flush();                        */                        ImageIO.write(sendImage, "JPEG", outStream);                    }                }            } catch (FileNotFoundException e) {                e.printStackTrace();            } catch (IOException e) {                e.printStackTrace();            } finally {                if (outStream != null) {                    try {                        outStream.close();                        outStream = null;                    } catch (IOException e) {                        e.printStackTrace();                    }                }                if (socket != null) {                    try {                        socket.close();                        socket = null;                    } catch (IOException e) {                        e.printStackTrace();                    }                }                if (ss != null) {                    try {                        ss.close();                        ss = null;                    } catch (IOException e) {                        e.printStackTrace();                    }                }            }        }    }

这个服务端里注释掉的代码我想用缓冲区像外发送data,可是这个在本地都不行,这个也不知道为什么。求解答。
  相关解决方案