与Java套接字和PIC的Java通信卡在read()中

时间:2014-08-12 09:49:18

标签: java sockets tcp socket.io microcontroller

我尝试使用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()被卡住了......

1 个答案:

答案 0 :(得分:0)

您正在从套接字读取直到流结束,并且您永远不会导致流结束,因为您永远不会关闭发件人的套接字。要么关闭套接字要么不要读取直到流结束。