Спасибо за помощь! Больше думая о вещах и читая ваши комментарии, я получил правильный ответ! Amro, ваш код великолепен, но я не могу реализовать Java-код, потому что программа, с которой я пытаюсь установить связь, - это не то, что я написал - это программа с именем c-gate и программа, которая может управлять Clipsal Система освещения Square D Тип команд, которые он принимает, имеет вид «на 254/56/26» - это включает свет, указанный этим путем.
Так что для всех тех, кому интересно, как выглядит мой финальный код:
функциональное сообщение = клиент (хост, порт, number_of_retries)
импорт java.io.BufferedReader;
импорт java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
импорт java.net.Socket;
import java.net.ServerSocket;
импорт java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
импорт java.util.Map;
импорт java.io. ;
import java.util. ;
if (nargin < 3)
number_of_retries = -1; % set to -1 for infinite
end
retry = 0;
input_socket = [];
message = [];
while true
retry = retry + 1;
if ((number_of_retries > 0) && (retry > number_of_retries))
fprintf(1, 'Too many retries\n');
break;
end
try
fprintf(1, 'Retry %d connecting to %s:%d\n', ...
retry, host, port);
% throws if unable to connect
input_socket = Socket(host, port);
% get a buffered data input stream from the socket
input_stream = input_socket.getInputStream;
d_input_stream = DataInputStream(input_stream);
fprintf(1, 'Connected to server\n');
% read data from the socket - wait a short time first
pause(0.5);
bytes_available = input_stream.available;
fprintf(1, 'Reading %d bytes\n', bytes_available);
message = zeros(1, bytes_available, 'uint8');
for i = 1:bytes_available
message(i) = d_input_stream.readByte;
end
message = char(message);
% cleanup
input_socket.close;
break;
catch
if ~isempty(input_socket)
input_socket.close;
end
% pause before retrying
pause(1);
end
end
% set up a socket between client and c-gate
host2 = 'localhost';
port2 = 20023;
try
input_socket2 = Socket(host2,port2);
input_stream2 = input_socket2.getInputStream;
d_input_stream2 = DataInputStream(input_stream2);
br = BufferedReader(InputStreamReader(input_stream2));
pw = PrintWriter(input_socket2.getOutputStream,true);
read = readLine(br)
disp('I read the line')
pw.println('get 254/56/26 level')
disp('I entered the command')
read2 = readLine(br)
end
конец
Еще раз спасибо!