【问题标题】:Java Send array of processes via tcp to serverJava 通过 tcp 将进程数组发送到服务器
【发布时间】:2015-12-22 00:04:17
【问题描述】:

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

编辑: 我有进程列表,我只需通过 TCP 将其发送到服务器端。

感谢您的帮助。

【问题讨论】:

  • 您需要编写特定于操作系统的代码。你可以开始here

标签: java tcp server


【解决方案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();
        }
    }
}

Wich 将使用 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,给它一个地址和端口号,它会发送一个数据。然后你可以得到一个 OutputStream 并通过它传递你的数据。在上面的示例中,您传递了一个 Process 对象实例的数组。 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,只有数据表示会有所不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 2015-03-03
    • 2011-05-03
    • 2011-04-30
    • 2013-07-21
    • 1970-01-01
    相关资源
    最近更新 更多