Почему я получаю разное поведение между сокетами Java и сокетами AsyncIO? [закрыто]JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему я получаю разное поведение между сокетами Java и сокетами AsyncIO? [закрыто]

Сообщение Anonymous »

Я переношу устаревший код MATLAB+Java на Python 3.11, это приложение, которое реализует собственный протокол через TCP/IP для обмена сообщениями между программой и списком устройств.
Я столкнулся со странной проблемой при обмене пакетами в моей реализации Python, которая использует AsyncIO StreamReaders/StreamWriters: я связал проблему с возможной настройкой различных флагов сокетов между библиотекой Java, встроенной в код MATLAB, и AsyncIO. -ориентированная реализация.
Конечно, исходная реализация получает ответ, в то время как в моей реализации на многие запросы просто не отвечают, на некоторые из них отвечают нормально.
Некоторые идеи:
  • У меня есть доступ к входному буферу получателя, пакеты доставляются без проблем в обеих реализациях.
  • Проверка трафика с помощью Wireshark показывает, что пакеты отправляются нормально (в версии Python пакеты также менее фрагментированы по сравнению с кодом MATLAB/Java), поэтому вероятность тайм-аута на принимающем устройстве из-за задержки + фрагментированные пакеты отброшены
  • В исходном коде есть вызов метода
com.socket.setPerformancePreferences(0,1,2)


хотя реализация в JDK пуста (вздох), поэтому я считаю, что она совершенно бесполезна.
Какой совет? Я предполагаю, что должны быть какие-то настройки по умолчанию, которые я не могу идентифицировать, возможно, какие-то другие настройки сокетов TCP/IP, возможно, флаги или тайм-ауты.
EDIT: MRE было ( справедливо) запросил
Сначала пример версии MATLAB:

% yes, we're importing Java libs
import java.net.*;
import java.io.*;

TCPIP_LOCALPORT = 3000;
AcceptTimeOut = 1000; % 1 sec

boaObjects = [];
id = 1;

% PC acts a server
boaObjects(id).com.socket = [];
serverSocket = ServerSocket(TCPIP_LOCALPORT);
serverSocket.setSoTimeout(AcceptTimeOut);

cs = serverSocket.accept();
boaObjects(id).com.socket = cs;

boaObjects(id).com.socket.setSoTimeout(TCPIP_ACCEPTTIMEOUT); %set timeout
% Disable NAGLE algorithm
boaObjects(id).com.socket.setTcpNoDelay(1);
% Set preferences, but this method is not implemented in the JDK
boaObjects(id).com.socket.setPerformancePreferences(0,1,2);

% Open input and output streams
boaObjects(id).com.inStream = DataInputStream(boaObjects(id).com.socket.getInputStream());
boaObjects(id).com.outStream = DataOutputStream(boaObjects(id).com.socket.getOutputStream());

packet = [80, 00, 01, 02, 89, 80, 127];

% Write and send a message
boaObjects(id).com.outStream.writeBytes(char(packet));
boaObjects(id).com.outStream.flush();

% The receiveing device might get something like
% t = 0 -> 80
% t = 1 -> 00 01 02 89
% t = 2 -> 80 127
% but we still get an answer

response = [];

while(boaObjects(id).com.inStream.available())
response = [response, boaObjects(id).com.inStream.readByte()];
end
[responseLEN,~,errorCode]=parseHeader(response);

while(length(response)

Подробнее здесь: https://stackoverflow.com/questions/788 ... yncio-ones
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Asyncio Async Funcitons вешает с Asyncio.gather. (Код работает без Asyncio.gather)
    Anonymous » » в форуме Python
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Java – использование DataInputStream с сокетами, с буферизацией или нет?
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Существует ли разное поведение `std::fstream` и `std::stringstream` при использовании чтения-записи?
    Anonymous » » в форуме C++
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Numericupdowns имеют разное поведение
    Anonymous » » в форуме C#
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Numericupdowns имеют разное поведение
    Гость » » в форуме C#
    0 Ответы
    32 Просмотры
    Последнее сообщение Гость

Вернуться в «JAVA»