java - 如何在自己定制的服务器中获取GPS设备数据?

标签 java gps

我已经配置了 GPS 设备的所有基本配置设置。 另外,我已将服务器 IP 设置为我的 Windows 服务器,端口号。 7700 已成功完成。

在服务器端我使用Java Socket来监听端口7700

try (ServerSocket serverSocket = new ServerSocket(7700)) {
        System.out.println("Server is listening on port 7700");
        int loop_counter = 1;
        while (true) {
            System.out.println("--- Refresh : "+loop_counter+" ---");
            Socket socket = serverSocket.accept();
            System.out.println("New client connected");

            InputStream input = socket.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));

            OutputStream output = socket.getOutputStream();
            PrintWriter writer = new PrintWriter(output, true);
            String text;
            String userInput;
            while ((userInput = reader.readLine()) != null){
                writer.println(userInput);
                writer.flush();
                //writer.close();
                System.out.println("echo: " + userInput);
            }
            //socket.close();
            loop_counter++;
        }
    } catch (IOException ex) {
        System.out.println("Server exception: " + ex.getMessage());
        ex.printStackTrace();
    }

输出是这样的:

Server is listening on port 7700
--- Refresh : 1 ---
New client connected
echo: xx
echo: V‚01
Server exception: socket closed
java.net.SocketException: socket closed
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.socketRead(Unknown Source)
    at java.net.SocketInputStream.read(Unknown Source)
    at java.net.SocketInputStream.read(Unknown Source)
    at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
    at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
    at sun.nio.cs.StreamDecoder.read(Unknown Source)
    at java.io.InputStreamReader.read(Unknown Source)
    at java.io.BufferedReader.fill(Unknown Source)
    at java.io.BufferedReader.readLine(Unknown Source)
    at java.io.BufferedReader.readLine(Unknown Source)
    at com.nru.test.Server.main(Server.java:29)

请任何人帮助我找到在服务器内获取 GPS 设备数据的正确方法。 谢谢

最佳答案

这是我们为服务器连接设置套接字的工作 Java 代码:

public class SocketConnect {
    private ServerSocket serverSocket = null;
    private Socket socket = null;
    private ObjectOutputStream sOutput;
    private boolean bindSocketPerformed = false;

    public boolean startSocket() {
        final int port = 4321;
        InetAddress addr = null;
        try {
            addr = InetAddress.getByName("127.0.0.1");
        } catch (UnknownHostException e) {
            LOG.error("SocketConnection: UnknownHostException     InetAddress.getByName ", e);
            shutdownSocket(serverSocket, socket);
            return false;
        }
        if (!bindSocketPerformed) {
            try {
                serverSocket = new ServerSocket();
            } catch (IOException e) {
                LOG.info("SocketConnection: IOException new ServerSocket ", e);
                shutdownSocket(serverSocket, socket);
                return false;
            }
            try {
                serverSocket.setReuseAddress(true);
            } catch (SocketException e) {
                LOG.error("SocketConnection: IOException setReuseAddress/setSoTimeout ", e);
                shutdownSocket(serverSocket, socket);
                return false;
            }
            try {
                SocketAddress socketAddress = new InetSocketAddress(addr, port);
                serverSocket.bind(socketAddress);
                bindSocketPerformed = true;
            } catch (IOException e) {
                LOG.error("SocketConnection: IOException bind ServerSocket ", e);
                shutdownSocket(serverSocket, socket);
                return false;
            }
        }
        try {
            socket = serverSocket.accept();
            LOG.info("SocketConnection: Server Accept done");
            LOG.info("Initializing with empty message");
            LOG.debug("Finished writing and closing the first object");
        } catch (IOException e) {
            LOG.error("SocketConnection: IOException bind ServerSocket ", e);
            shutdownSocket(serverSocket, socket);
            return false;
        }
        return true;
    }

    private void shutdownSocket(ServerSocket serverSocket, Socket socket) {
        try {
            if (sOutput != null) {
                sOutput.close();
            }
            if (socket != null) {
                socket.close();
            }
            if (serverSocket != null) {
                serverSocket.close();
            }
        } catch (IOException e) {
            LOG.info("SocketConnection: IOException socket.close ", e);
        }
    }

    public writeMsg(MySharedObject obj) {
        try {
            LOG.debug("Before socket write");
            sOutput = new ObjectOutputStream(socket.getOutputStream());
            sOutput.writeObject(obj);
            sOutput.flush();
            LOG.info("After socket write");
        }
        catch (IOException e) {
            LOG.error("Error sending message [{}]", obj.toString());
        }
    }
    private void close() {
        // try to close the connection
        try {
            if (sOutput != null)
                sOutput.close();
        } catch (Exception e) {
            LOG.info("Close Input/output Streams exception", e);
        }
        try {
            if (socket != null)
            socket.close();
        } catch (Exception e) {
            LOG.info("Close Input/output Socket exception", e);
        }
    }
}

我们尝试了 Java 代码以使其无缝运行。正如您所看到的,我们在开始实际连接之前设置了serverSocket.setReuseAddress(true)

您可以将默认的 Inet 地址字符串“127.0.0.1”替换为您选择的任何可访问地址。端口号 4321 也可以更改。

关于java - 如何在自己定制的服务器中获取GPS设备数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49870525/

相关文章:

php - 如何使用 php 向 gps 跟踪器发送命令

linux - GPSD 简单查询

java - 执行子字符串时字符串索引超出范围

java - 如何计算任意坐标处2个经度之间的距离?我们可以假设地球是一个球体吗?

java - 为什么这个正则表达式会失败?

java - 无法正确解析 JSON 数组

android - 跟踪 GPS 点并找到最近的邻居?

python - 从日期时间转换为 GPS 时间

java - 根据初始化数据结构的方式,我在 Java 中得到不同的行为

java - 解析字符串以获取分组参数