Java通过tcp将进程数组发送到服务器

时间:2015-09-24 11:42:37

标签: java tcp server

我正在编写外部Taskmanager,我需要通过tcp将进程列表发送到我的服务器应用程序。但我不知道如何开始以及如何运作。

编辑: 我有进程列表,我只需要通过TCP将它发送到Serverside。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果您已有一个进程列表,那么使用Java为您的目的制作客户端 - 服务器逻辑并不困难。首先,您需要建立一个服务器端:

public class ServerSide {

    public static void main(String[] args) {
        try
        {
            ServerSocket myServerSocket = new ServerSocket(9999);
            Socket skt = myServerSocket.accept();
            List<Process> objects = null;
            try {
                ObjectInputStream objectInput = new ObjectInputStream(skt.getInputStream());
                try {
                    Object object = objectInput.readObject();
                    objects =  (ArrayList<Process>) object;
                    System.out.println(objects);
                } catch (ClassNotFoundException e) {             
                    e.printStackTrace();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

将使用ServerSocket监听指定的端口,在这种情况下是9999.然后接受连接(看看myServerSocket.accept(),它停止执行,直到接受任何连接),它创建一个Socket你可以得到它的InputStream并从中获取一个对象。在此示例中,服务器在第一次接受连接后停止,您应该接受具有无限循环的任意数量的连接。

当你有一台服务器时,你可以建立一个客户端,它将向服务器发送一个进程列表:

public class ClientSide {

    public static void main(String[] args) {
        try {
            Socket socket = new Socket("127.0.0.1",9999);

            ArrayList<Process> my =  new ArrayList<Process>();
            my.add(new Process("Test1"));
            my.add(new Process("Test2"));
            try
            {
                ObjectOutputStream objectOutput = new ObjectOutputStream(socket.getOutputStream());
                objectOutput.writeObject(my);
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这种情况下,您将自己创建一个Socket,给它一个eddress和端口号,它将在那里发送数据。然后,您可以获取OutputStream并通过它传递数据。在上面的示例中,您将传递一个Process对象实例Array。 Process类看起来像:

public class Process implements Serializable {

    private String processName = null;

    public Process(String processName) {
        this.processName = processName;
    }

    @Override
    public String toString() {
        return processName;
    }
}

在Process类的情况下,它应该实现Serializable接口。在这种情况下,您不需要为它的序列化制定一些逻辑。

但是如果你必须用Java创建一个客户端,而不是服务器,那么它可能会有点困难。你可以看看here,看看某种例子,Java客户端如何与C ++服务器通信。无论如何,在Java部分你应该使用Socket和它的OutputStream,只有数据表示会有所不同。

相关问题