Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 客户端在发送数据后与服务器断开连接_Java_Sockets_Network Programming_Java Io - Fatal编程技术网

Java 客户端在发送数据后与服务器断开连接

Java 客户端在发送数据后与服务器断开连接,java,sockets,network-programming,java-io,Java,Sockets,Network Programming,Java Io,我正在创建一个客户端服务器远程截图捕获应用程序。我可以成功地在服务器和客户端之间交换屏幕截图。但是,一旦客户端捕获并将屏幕截图发送到服务器,它就会断开与服务器的连接。我希望客户端在截图后保持连接。我对java输入/输出和网络编程都是个新手。谁能帮我指出错误吗 以下是客户端的完整代码。如果服务器的代码也需要解决这个问题,我将上传我的服务器代码也 客户 public class ScreenClient { public static void main(String[] args) th

我正在创建一个客户端服务器远程截图捕获应用程序。我可以成功地在服务器和客户端之间交换屏幕截图。但是,一旦客户端捕获并将屏幕截图发送到服务器,它就会断开与服务器的连接。我希望客户端在截图后保持连接。我对java输入/输出和网络编程都是个新手。谁能帮我指出错误吗

以下是客户端的完整代码。如果服务器的代码也需要解决这个问题,我将上传我的服务器代码也

客户

public class ScreenClient {

    public static void main(String[] args) throws Exception {
        Robot robot = new Robot();
        BufferedImage screen;
        Socket server = new Socket("localhost", 5494);
        BufferedReader bf = new BufferedReader(new InputStreamReader(server.getInputStream()));
        String s;
        s = bf.readLine();

        System.out.println(s);

        if (s.contains("execute")) {
            Rectangle size = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());

            screen = robot.createScreenCapture(size);

            int[] rgbData = new int[(int) (size.getWidth() * size.getHeight())];

            screen.getRGB(0, 0, (int) size.getWidth(), (int) size.getHeight(), rgbData, 0, (int) size.getWidth());

            OutputStream baseOut = server.getOutputStream();

            ObjectOutputStream out = new ObjectOutputStream(baseOut);

            out.writeObject(size);

            for (int x = 0; x < rgbData.length; x++) {

                out.writeInt(rgbData[x]);

            }

            out.flush();
        }
    }
}
公共类屏幕客户端{
公共静态void main(字符串[]args)引发异常{
机器人=新机器人();
缓冲图像屏幕;
套接字服务器=新套接字(“localhost”,5494);
BufferedReader bf=新的BufferedReader(新的InputStreamReader(server.getInputStream());
字符串s;
s=bf.readLine();
系统输出打印项次;
如果(s.包含(“执行”)){
矩形大小=新矩形(Toolkit.getDefaultToolkit().getScreenSize());
屏幕=robot.createScreenCapture(大小);
int[]rgbData=newint[(int)(size.getWidth()*size.getHeight())];
getRGB(0,0,(int)size.getWidth(),(int)size.getHeight(),rgbData,0,(int)size.getWidth();
OutputStream baseOut=server.getOutputStream();
ObjectOutputStream out=新的ObjectOutputStream(baseOut);
out.writeObject(大小);
对于(int x=0;x
服务器

public class ScreenServer extends JFrame implements ActionListener {

    String uname;
    BufferedReader br;
    static JTextArea taMessages, taUserList;
    JTextField tfInput;
    static Socket client;//
    JButton btnCapture, btnExit, btnGetUsers;
    static ArrayList<String> users = new ArrayList();
    PrintWriter os;

    public static void main(String[] args) throws Exception {

        Robot robot = new Robot();

        BufferedImage screen;
        ScreenServer screenServer = new ScreenServer();
        screenServer.buildInterface();
        ServerSocket server = new ServerSocket(5494);
        while (true) {



            client = server.accept();
            users.add(client.getInetAddress().getHostName());
            InetAddress inet1 = client.getInetAddress();

            broadcast(inet1.getHostName(), " Has connected!");



            ObjectInputStream in = new ObjectInputStream(client.getInputStream());

            Rectangle size = (Rectangle) in.readObject();

            int[] rgbData = new int[(int) (size.getWidth() * size.getHeight())];

            for (int x = 0; x < rgbData.length; x++) {

                rgbData[x] = in.readInt();

            }





            screen = new BufferedImage((int) size.getWidth(), (int) size.getHeight(), BufferedImage.TYPE_INT_ARGB);

            screen.setRGB(0, 0, (int) size.getWidth(), (int) size.getHeight(), rgbData, 0, (int) size.getWidth());
            InetAddress clientAddress = client.getInetAddress();
            String clientName = clientAddress.getHostName();
            String t = (new Date()).toString();
            ImageIO.write(screen, "png", new File(clientName + ".png"));
        }

    }

    public void buildInterface() {
        btnCapture = new JButton("Capture Screen");
        btnExit = new JButton("Exit");
        btnGetUsers = new JButton("Get Users");



        //chat area
        taMessages = new JTextArea();
        taMessages.setRows(10);
        taMessages.setColumns(50);
        taMessages.setEditable(false);
        //online users list
        taUserList = new JTextArea();
        taUserList.setRows(10);
        taUserList.setColumns(10);
        taUserList.setEditable(false);
        //top panel (chat area and online users list
        JScrollPane chatPanel = new JScrollPane(taMessages, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        JScrollPane onlineUsersPanel = new JScrollPane(taUserList, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        JPanel tp = new JPanel(new FlowLayout());
        tp.add(chatPanel);
        tp.add(onlineUsersPanel);
        add(tp, "Center");
        //user input field
        tfInput = new JTextField(50);
        //buttom panel (input field, send and exit)
        JPanel bp = new JPanel(new FlowLayout());
        bp.add(tfInput);
        bp.add(btnCapture);
        bp.add(btnExit);
        bp.add(btnGetUsers);

        add(bp, "South");
        btnCapture.addActionListener(this);
        tfInput.addActionListener(this);//allow user to press Enter key in order to send message
        btnExit.addActionListener(this);
        btnGetUsers.addActionListener(this);

        setSize(500, 300);
        setVisible(true);
        pack();
    }

    @Override
    public void actionPerformed(ActionEvent evt) {

        if (evt.getSource() == btnExit) {
            taMessages.setText(this.client + " has disconnected");
            users.remove(this.client);

            System.exit(0);
        } else if (tfInput.getText().contains("!getusers")) {
            taUserList.setText(" ");
            this.getUsersOnline();

        } else if (evt.getSource() == btnCapture) {
            MessagesThread mt=new MessagesThread(client);
           mt.start();
        }

        if (evt.getSource() == btnGetUsers) {
            taUserList.setText("");
            try {
                // putUserOnline(this.client.getInetAddress().getHostName());
                getUsersOnline();
            } catch (NullPointerException nl) {
                System.out.println("ERROR--> No Client Connection Found");
            }
        }
    }

    private void getUsersOnline() {
        for (String s : users) {
            putUserOnline(s);
        }

    }

    public static void broadcast(String user, String message) {
        // send message to all connected users
        putMessage(user, message);

    }

    public static void putMessage(String uname, String msg) {
        taMessages.append(uname + ": " + msg + "\n");
    }

    public static void putUserOnline(String name) {
        taUserList.setText(name + ": " + "\n");
    }

    public class MessagesThread extends Thread {

        Socket client;

        public MessagesThread(Socket client) {
            this.client = client;
        }

        @Override
        public void run() {
            String ClientName = tfInput.getText();
            try {
                String response = "execute";
                if (users.contains(ClientName)) {

                    os = new PrintWriter(client.getOutputStream(), true);
                    os.println(response);


                }
            } catch (IOException ex) {
                Logger.getLogger(ScreenServer.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}
公共类ScreenServer扩展JFrame实现ActionListener{
字符串uname;
缓冲剂;
静态JTextArea taMessages、Tauser列表;
JTextField tfInput;
静态套接字客户端//
JButton btnCapture、btnExit、btnGetUsers;
静态ArrayList用户=新建ArrayList();
印刷机操作系统;
公共静态void main(字符串[]args)引发异常{
机器人=新机器人();
缓冲图像屏幕;
ScreenServer ScreenServer=新建ScreenServer();
screenServer.buildInterface();
ServerSocket服务器=新的ServerSocket(5494);
while(true){
client=server.accept();
添加(client.getInetAddress().getHostName());
InetAddress inet1=client.getInetAddress();
广播(inet1.getHostName(),“已连接!”);
ObjectInputStream in=新的ObjectInputStream(client.getInputStream());
矩形大小=(矩形)in.readObject();
int[]rgbData=newint[(int)(size.getWidth()*size.getHeight())];
对于(int x=0;x未找到客户端连接”);
}
}
}
私有void getUsersOnline(){
法罗群岛