我尝试使用java应用程序与wifi(Flyport)中的μController进行通信。
我的java应用程序有问题: 它首先创建一个与Flyport服务器通信的套接字,然后发送消息并接收Flyport的答案。
一切正常,直到阅读部分。我正在轮询BufferedReader的read()函数,直到它返回-1,但它没有。第一次读取工作正常,所有答案都是红色,但应用程序在尝试再次读取时仍然卡住。
我的代码非常简单: Java应用程序:
try (
Socket clientSocket = new Socket(hostName, portNumber);
PrintWriter out =
new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in =
new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
)
{
...//Connection and sending message works fine
}
char[] buffer = new char[500];
while ((in.read(buffer)) != -1) { // first read() works fine, second read() stay stuck...
System.out.println(buffer); // display all answer sent by flyport
}
flyport中的代码:
while(isClientConnected){
//check if client is still connected
...
//read client message
while((RxLen=TCPRxLen(sock))>0)
{
TCPRead(sock,bff,RxLen);
strcat(msg,bff);
}
//write back to the client that the order is received
TCPWrite(sock, msg, strlen(msg));
//process the client order
...
//Write to the client that the process is done
TCPWrite(sock, msg2, strlen(msg2));
}
java应用程序使用第一个read()读取msg和msg2。 msg和msg2最后有“\ r \ n”。
有人不能告诉我哪里错了吗? BufferedReading是否有一个函数可以告诉您还有多少数据需要读取?
谢谢和问候。
注意:我在java应用程序中尝试使用一个小缓冲区,问题是一样的,当没有什么可读的时候read()被卡住了......
答案 0 :(得分:0)
您正在从套接字读取直到流结束,并且您永远不会导致流结束,因为您永远不会关闭发件人的套接字。要么关闭套接字要么不要读取直到流结束。