【发布时间】:2015-12-22 00:04:17
【问题描述】:
我正在编写一个外部任务管理器,我需要通过 tcp 将进程列表发送到我的服务器应用程序。但我不知道如何开始以及它是如何工作的。
编辑: 我有进程列表,我只需通过 TCP 将其发送到服务器端。
感谢您的帮助。
【问题讨论】:
-
您需要编写特定于操作系统的代码。你可以开始here
我正在编写一个外部任务管理器,我需要通过 tcp 将进程列表发送到我的服务器应用程序。但我不知道如何开始以及它是如何工作的。
编辑: 我有进程列表,我只需通过 TCP 将其发送到服务器端。
感谢您的帮助。
【问题讨论】:
如果您已经有一个进程列表,那么使用 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,只有数据表示会有所不同。
【讨论】: