Я пытаюсь отправить сообщение с моего компьютера на доску, но проблема в том, что я продолжаю терять соединение, прежде чем решу отправить сообщение.
Это код, с которого я отправляюсообщение.Я создаю сокет, подключаюсь к плате, а затем жду ввода от объекта 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.