java - 从客户端发送对象到服务器

标签 java sockets

线程 1 正在截屏并设置图像名称。 线程 2 正在将屏幕截图和名称(imageInfo 对象)发送到服务器。 它没有将 ImaheInfo 对象发送到服务器。

客户端

 abstract class ScreenCapture extends Thread implements Serializable {
 static BufferedImage screencapture;
 static ImageData object1;

public static void main(String args[]) throws
       AWTException, IOException, InterruptedException {

  // Open your connection to a server, at port 1234
  final Socket ClientSocket = new Socket("localhost",1234);

  final ObjectOutputStream dos= new ObjectOutputStream(ClientSocket.getOutputStream());
  //ObjectInputStream in = new      ObjectInputStream(ClientSocket.getInputStream() );

  try{
      //First thread that is Taking screenshot
      Thread TakeScreenShotthread = new Thread () 
      {
          public void run () {
          // Capture Screen using BufferedImage Library
           try {
                        ImageData.screencapture = new    Robot().createScreenCapture(
                        new          Rectangle(Toolkit.getDefaultToolkit().getScreenSize()) );
                        System.out.println("thread1 is running...");
                        object1.ImageName=System.currentTimeMillis();
                        t++;
            } catch (HeadlessException e) {

                    e.printStackTrace();
            } catch (AWTException e) {
                    e.printStackTrace();
            }
          } 
       };

        //Thread 2 that is Sending Screenshot to server
        Thread sendingScreenShotThread =new Thread () {
          public void run () {
              //Sending Screen to Server
               try {

                        dos.writeObject(object1.screencapture );

                        File Rif = new File(System.currentTimeMillis() +       ".jpg");
                        ImageIO.write(object1.screencapture, "jpg", Rif);
                        System.out.println("thread2 is running...");

                } catch (IOException e) {
                e.printStackTrace();
                }                  
          }
        };
        TakeScreenShotthread.start();
        TakeScreenShotthread.sleep(1000);
        sendingScreenShotThread.start();
        sendingScreenShotThread.sleep(1000);
        TakeScreenShotthread.run();
        sendingScreenShotThread.run();
      }finally
         {
          //Closing ClientS

                //in.close();
                ClientSocket.close();
          }

      }

  }

服务器

    static BufferedImage image;
    static long name;
     public static void main(String args[]) throws IOException
    {
     ServerSocket serversock = new ServerSocket(1234);
    Socket clientSocket = null;
    clientSocket = serversock.accept();
    ObjectInputStream in=(ObjectInputStream) clientSocket.getInputStream();
    OutputStream out = null;
     ImageData object= null;

  try{ 
    boolean processing=true;

 while(processing)
  {
   try {

    object = (ImageData) in.readObject();

    //Saving Object instances 
    name= object.ImageName;
    image= object.screencapture;
        out = new BufferedOutputStream(new  FileOutputStream(path+ object.ImageName + ".jpg"));

        ImageIO.write(image, "jpg", out);


        //  while ((in.read(buffer)) >= 0) {
            //out.write(buffer);

        System.out.println("Image file written successfully");
    }
   } catch (Exception e) {
   }finally {
       processing=false;
        if (out != null) out.close();
      }
     }
  }
   finally{
        out.close();
       clientSocket.close();
        serversock.close();

        }   
     }

图像信息

 public class ImageData {

  static BufferedImage screencapture;
  static long ImageName;
 ImageData()
 {
     screencapture=null;
     ImageName=(Long) null;
 }
}

错误

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

最佳答案

您仅在客户端中读取一张图像,然后关闭连接,因此下一次发送会出现此异常。第一个finally block 中的内容应该位于前面的catch block 内。下一次读取会抛出SocketException:套接字已关闭,但由于您忽略了所有异常,所以您错过了它。

注意 Thread.sleep() 是一个静态方法,用于 hibernate 当前线程。

关于java - 从客户端发送对象到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28806141/

相关文章:

java - JPA中按组获取记录

C 中的 Connect() 函数,参数无效

java - 有没有办法使用 JPA 注释和 Hibernate 动态选择 @GeneratedValue 策略?

java - 我的 Eclipse + apache tomcat/6.0.30 停止提供文件

iPhone sdk 套接字 - 使用的带宽

java - 如何在捕获 IOException 时关闭 ServerSocket 连接?

c - 选择()没有响应?

c++ - C++ : Can multiple Clients listen to one server when endpoint is hard coded? 中的远程过程调用 (RPC)

java - 从 shell 运行依赖于其他类的 java 程序

java - 具有相同参数的 JUnit 5 多个参数化测试 - 迁移参数化