我尝试在向服务器发送下一组数据之前,为需要确认的设备创建套接字侦听器。我能够发送确认信息,但是当创建新连接时,我就会丢失数据。我在下面粘贴了我的代码。
<p:commandButton>
我的日志编写器主题如下所示。
public void run() {
try {
servSoc = new ServerSocket(this.port);
File file = new File("logs.txt");
// creates the file
Socket server = null;
//FileWriter writer = new FileWriter(file);
while (true) {
try {
System.out.println("Waiting for client on port "
+ servSoc.getLocalPort() + "...");
server = servSoc.accept();
System.out.println("Just connected to "
+ server.getRemoteSocketAddress());
InputStreamReader in = new InputStreamReader(server.getInputStream());
//InputStreamReader in = new InputStreamReader(server.getInputStream());
DataOutputStream out =
new DataOutputStream(server.getOutputStream());
new Thread(new LogWriter(in, out)).start();
// Writes the content to the file
if (servSoc.isClosed()) {
System.out.println("Connection closed....");
servSoc.close();
}
} catch (SocketTimeoutException s) {
System.out.println("Socket timed out!");
s.printStackTrace();
break;
} catch (IOException e) {
e.printStackTrace();
break;
}
}
} catch (IOException ex) {
java.util.logging.Logger.getLogger(SenselSocketListner.class.getName()).log(Level.SEVERE, null, ex);
ex.printStackTrace();
} finally {
}
}
public static void main(String args[]) {
int port = 8294;
Thread t = new SenselSocketListner(port);
t.start();
}
有关设备的人建议我可能不会足够快地发送确认。请帮助我找到加快速度的方法,我注意到语句后的延迟&#34; System.out.println(&#34;写入数据......&#34;);&#34;在日志编写器中。
答案 0 :(得分:0)
设备是否真的了解writeUTF()
的结果?除非它是用Java实现的,否则极不可能。你肯定应该直接写出消息的字节或字符。
其他说明:
readLine()
在阅读主题中返回null时,您应该关闭已接受的套接字。答案 1 :(得分:-1)
在LogWriter中运行的while循环会捕获您的应用程序,直到套接字关闭。如果您需要在套接字上进行交谈,则必须知道期望的内容 - 由协议定义。如果它是一行,只需读一行。如果是文本文件,则必须设计一个协议,通知您需要的字节数。
此外,应该在单个打开的日志文件上进行日志记录,而不是在每行之后关闭。