2013-01-16 3 views
1

Я хочу общаться между скриптом Matlab и приложением Qt (C++) на одном компьютере. В Qt вы создаете объект QLocalServer и направляете его для прослушивания соединений на определенном дескрипторе, например «my_server» (может быть что угодно).Подключение к локальному серверу от Matlab

В Matlab, я смотрел на то, что кажется, что соответствующие списки MatlabCentral, такие как this one и this one, но ни в одном случае я могу заставить их работать, и я даже не понимаю, как сделать this-- нет возможности указывать дескриптор. Если я просто скажу им, чтобы они слушали локальный хост, они не соединяются.

Так что я могу здесь сделать? Возможно, это делается через MEX-файл, но я оставляю это в качестве последнего средства. Также я застрял в R2009b, поэтому у меня нет команды udp в Matlab.

+1

Рассмотрите возможность использования Java-сокетов: http://www.mathworks.com/matlabcentral/fileexchange/25249-tcpip-socket-communications-in-matlab-using-java-classes – slayton

+0

@slayton Это в основном идентично второму листингу Я упомянул. Тот же вопрос. –

ответ

0

Так получается, что в Qt QLocalServer/QLocalSocket не являются правильными классы для делать это, несмотря на их имена. Скорее, файлы MatlabCentral, на которые я ссылался (и, возможно, и тот, который был указан @Frederik, хотя я не мог сразу это получить), отлично подходят, если вы создаете QTcpServer и соответствующие QTcpSocket, и установите на обоих концах хост с локальным хостом и порт до 4444 (или что-то еще). Мне было очень легко построить то, что мне нужно после Qt's Loopback example.

1

Попробуйте Toolbox от Peter Rydesäter: http://www.mathworks.com/matlabcentral/fileexchange/345-tcpudpip-toolbox-2-0-6 довольно старый, но все еще работает.

Пример с двумя Matlab-Экземпляры:

Отправитель:

function sendudp(host, port, data) 
    udp=pnet('udpsocket',1111);   % open local socket on port 1111 
    pnet(udp,'write',data);    % write data to buffer 
    pnet(udp,'writepacket',host,port); % send udp-packet 
    pnet(udp,'close');     % close connection 
end 

Приемник:

sock = pnet('udpsocket', 950) % open socket on port 950 

Отправитель:

sendudp('127.0.0.1', 950, 'Hello World') % Call function defined above, send Hello World to localhost, port 950 

Приемник:

size = pnet(sock, 'readpacket'); % Get Data from sock, and load to buffer 
data = pnet(sock, 'read'); % Read Data from buffer 
+0

Правильно Я смотрел на это, но это одна и та же история - как я могу указать дескриптор? Вы можете ввести IP-адрес или «localhost» только, насколько я могу судить. Но я не знаю, как конкретно подключиться к другому процессу. –

Смежные вопросы