Обычно при подключении TCP / IP выполняется квитирование, чтобы убедиться, что данные были успешно переданы до отправки следующего пакета.
например, python будет делать следующее
# Setup Socket for data transfer
TransferSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host = 'localhost'
port = '5050'
TransferSocket.connect((host,port))
# Get data to send (this case a text file)
f = open("file.txt","rb")
# send message
chunk = f.read(1024)
while (chunk):
TransferSocket.send(chunk) # Send data
Rmsg = TransferSocket.recv(1024) # wait for handshake before sending more
if Rmsg.decode() == "ACK":
chunk = f.read(1024)
else:
pass
Пакет отправляется и сразу же ждет ответа перед отправкой следующего пакета
В matlab
tcpipServer = tcpip('localhost',5050,'NetworkRole','Server');
set(tcpipServer,'OutputBufferSize',8);
set(tcpipServer, 'BytesAvailableFcnCount',512);
set(tcpipServer, 'BytesAvailableFcnMode','byte');
set(tcpipServer, 'BytesAvailableFcn', @(h,e)recmessage(h,e));
Отсюда всякий раз, когда пакет получен от python, запускается функция recmessage. Функция находится ниже.
function recmessage(h,e)
message = fread(tcpipServer,tcpipServer.BytesAvailable);
% Do whatever else you want
fwrite(tcpipServer,"ACK");
end
Отсюда 'ok' будет отправлено обратно на python и повторено.
Это базовый пример для передачи данных.Для того, что вы хотите, это, скорее всего, будут данные, а не «хорошо» код.
Но да, если вы установили рукопожатие вместо того, чтобы пытаться рассчитать время, это должно решить вашу проблему.