2014-02-02 6 views
0

почему-то каждый раз, когда я пытаюсь написать объект в сокет, и это ошибки со следующей ошибкой:сброса гнезда пэра без переустановки самого

java.net.SocketException: Connection reset by peer: socket write error 

Полных трассировки стеки в конце. Вот мой код клиента: Примечание: ObjectOutputStream.writeObject() имеет обычай письменное writeObject()

SerializedImage si = new SerializedImage(); 
     si.setImage((BufferedImage) image); 

     NetworkObject no = new NetworkObject(si); 
     try 
     { 
      Socket s = new Socket(hostname, 912);//hostname is 192.168.1.12 
      OutputStream os = s.getOutputStream(); 
      ObjectOutputStream oos = new ObjectOutputStream(os); 
      oos.writeObject(no);//error start when this is called 
      oos.close(); 
      os.close(); 
      s.close(); 
     } 
     catch (UnknownHostException e) 
     { 
      e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 

ObjectOutputStream

private void writeObject(java.io.ObjectOutputStream out) throws IOException 
    { 
      out.writeObject(name); 
      ImageWriter writer = (ImageWriter) ImageIO.getImageWritersBySuffix("jpg").next(); 
      writer.setOutput(ImageIO.createImageOutputStream(out)); 
      ImageWriteParam param = writer.getDefaultWriteParam(); 
      param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
      param.setCompressionQuality(1f); 

      BufferedImage bImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB); 

      //obtain it's graphics 
      Graphics2D bImageGraphics = bImage.createGraphics(); 

      //draw the Image (image) into the BufferedImage (bImage) 
      bImageGraphics.drawImage(image, null, null); 

      // cast it to rendered image 
      RenderedImage rImage = (RenderedImage) bImage; 

      writer.write(rImage); 
    } 

    private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException 
    { 
     name = (String) in.readObject(); 
     image = ImageIO.read(ImageIO.createImageInputStream(in)); 
    } 

, а затем у меня есть сервер, получающий

ServerSocket ss = new ServerSocket(912); 
      Socket s = ss.accept(); 
      InputStream is = s.getInputStream(); 
      ObjectInputStream ois = new ObjectInputStream(is); 
      NetworkObject net = (NetworkObject) ois.readObject(); 
      is.close(); 
      s.close(); 
      ss.close(); 

      ImageHandler.importData(net.image.getImage(), main.jtext); 

- Полная трассировка стека

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.ObjectOutputStream$BlockDataOutputStream.writeBlockHeader(Unknown Source) 
    at java.io.ObjectOutputStream$BlockDataOutputStream.drain(Unknown Source) 
    at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(Unknown Source) 
    at java.io.ObjectOutputStream.writeFatalException(Unknown Source) 
    at java.io.ObjectOutputStream.writeObject(Unknown Source) 
    at Main.send(Main.java:305) 
    at ImageHandler.importData(ImageHandler.java:97) 
    at javax.swing.TransferHandler$DropHandler.drop(Unknown Source) 
    at java.awt.dnd.DropTarget.drop(Unknown Source) 
    at javax.swing.TransferHandler$SwingDropTarget.drop(Unknown Source) 
    at sun.awt.dnd.SunDropTargetContextPeer.processDropMessage(Unknown Source) 
    at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchDropEvent(Unknown Source) 
    at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchEvent(Unknown Source) 
    at sun.awt.dnd.SunDropTargetEvent.dispatch(Unknown Source) 
    at java.awt.Component.dispatchEventImpl(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.processDropTargetEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Window.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$200(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 
+0

Я отредактировал мое сообщение, чтобы включить мое пользовательское чтение/запись для ObjectOutputStream – user3045798

ответ

0

Обычной причиной этого является то, что вы ранее писали соединение, которое уже было закрыто другим концом. Другими словами, ошибка протокола приложения.

Вы можете видеть по трассе стека, что это происходит внутри ImageHandler.importData(), а не внутри кода, который вы опубликовали.

+0

ImageHandler.importData() ничего не делает с каким-либо соединением, все, что он делает, - это вызов (изображение) моего сообщения. – user3045798

+0

Таким образом, сервер, о котором идет речь, закрывает соединение преждевременно. Кажется, вы тоже не разместили этот код. – EJP

+0

", а затем у меня есть сервер, получающий" код ниже этого – user3045798

Смежные вопросы