gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:12:47 25 4
gpt4 key购买 nike

我已经配置了 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com