ESP8266 - клиентский сокет закрывается после вызова метода readBytes - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь отправить сообщение с моего компьютера на доску, но проблема в том, что я продолжаю терять соединение, прежде чем решу отправить сообщение.

Это код, с которого я отправляюсообщение.Я создаю сокет, подключаюсь к плате, а затем жду ввода от объекта Scanner.Когда я что-то получаю, я отправляю сообщение на доску.

КЛИЕНТ

    Socket socket = new Socket();
    socket.connect(new InetSocketAddress("192.168.4.1",3000));
    Scanner in = new Scanner(System.in);
    String message = DataProtocol.sendMessageFormat("KLASA","METHOD","FILIP CACIC");
    String message1 = DataProtocol.sendMessageFormat("KLASA","METHOD","FILIP CACIC");
    message = message1 + message;
    OutputStream outputStream = socket.getOutputStream();

    String line;
    while(!(line = in.nextLine()).equals("EXIT")){
        outputStream.write(message.getBytes());
        outputStream.flush();
    }

Это код recv.message.

СЕРВЕР

void CommunicationProcessor::readFromStream(WiFiClient* wifiClient){
CLIENT_ACTIVE = true;

while(CLIENT_ACTIVE){
    Serial.println(wifiClient->connected()); -> returns 1
    int bytesRead = wifiClient->readBytes(buffer,1024); -> returns 0
    Serial.println(wifiClient->connected()); -> returns 0
    dataManager.appendData(bufferReader.getDataReaded(buffer,bytesRead));

    if (checkIfEndLine(bytesRead)){
        handleDataRecv();
        dataManager.clearBuffer();
    }
}
Serial.println("CLIENT QUIT");

}

Перед методом readBytes я вызываю метод connected() и он возвращает 1.Так что все в порядке.Метод readBytes возвращает 0, потому что я еще не отправил ни одного сообщения.После этого я вызываю connected() еще раз, и на этот раз он возвращает 0.

Теперь, если я удаляю этот объект Scanner и зацикливаюсь из кода и немедленно отправляю сообщение, сервер получит recv.сообщение.

    Socket socket = new Socket();
    socket.connect(new InetSocketAddress("192.168.4.1",3000));
    Scanner in = new Scanner(System.in);
    String message = DataProtocol.sendMessageFormat("KLASA","METHOD","FILIP CACIC");
    String message1 = DataProtocol.sendMessageFormat("KLASA","METHOD","FILIP CACIC");
    message = message1 + message;
    OutputStream outputStream = socket.getOutputStream();
    outputStream.write(message.getBytes());
    outputStream.close();

Мои вопросы: почему соединение закрывается после вызова метода readBytes?

EDIT

Я только что проверил с этим кодом, и соединение все еще теряется,Строка «Клиент жив» печатается только один раз.

SERVER

 void loop(){
   delay(1000);
   if (client){
     Serial.println("Client alive");
     Serial.println(client.connected());
   }else{
     client = server.available();
     if (client){
       Serial.println(client.connected());
   }

}}

EDIT 2

Я обнаружил проблему.Я использовал плату как WIFI-ACCESS POINT, но когда я подключил плату к маршрутизатору и компьютеру, все работает нормально.Итак, теперь мои вопросы: почему я теряю соединение, когда плата настроена как ACCESS-POINT?

EDIT 3

Я нашел причину проблемы.У меня была проблема с подключением к точке доступа Wi-Fi, поэтому я вызвал метод WIFI.persistent (false), и это вызвало исключение Broken Pipe (поток закрыт) в Java.

...