2

PC で実行されている matlab と Android デバイス (Galaxy タブ) の間で信頼できる接続を確立しようとしています。

私のクライアント コードは、このリンクの優れた例に基づいています。この例では、サーバーは PC 上で実行されている Java アプリです。この例を Java アプリで実行したところ、完全に動作しました。

私のmatlabコードは、ここのMathworksで見つけたコードに基づいています:(私のコードは以下に掲載されています)

残念ながら、動作は非常に一貫性がなく、多くの場合、接続がまったくありません。(動作する場合もありますが、送信される単語は 1 つだけです)

サーバー側の仕組みがわかりません。コード行 'ServerConnect' はブロッキング ラインですか? クライアントと同期する必要がありますか?

前もって感謝します!

アリエル

ここに私のmatlabコードがあります:

これがメインプログラムです:

import java.net.ServerSocket
import java.io.*

MessageStr = {'THIS','IS','MY','MESSAGE'};

server_socket  = ServerConnect(4444,inf);

output_socket = server_socket.accept;

for k = 1:length(MessageStr)

pause(3);  
ServerSend(MessageStr{k},server_socket,output_socket); 


end


%clean

close(server_socket);

これは、関数 ServerConnect のコードです。

function server_socket  = ServerConnect(output_port, number_of_retries)
import java.net.ServerSocket
import java.io.*


retry             = 0;

server_socket  = [];
fprintf(1, 'waiting for client to connect\n');
while true

    retry = retry + 1;

    try
        if ((number_of_retries > 0) && (retry > number_of_retries))
            fprintf(1, 'Too many retries\n');
            break;
        end

        %fprintf(1, ['Try %d waiting for client to connect to this ' ...
        %            'host on port : %d\n'], retry, output_port);

        % wait for 1 second for client to connect server socket

        server_socket = ServerSocket(output_port);
        server_socket.setSoTimeout(1000);


        fprintf(1, 'Client connected\n');

        break;

    catch
        if ~isempty(server_socket)
            server_socket.close
        end


        % pause before retrying
        pause(1);
    end
end



end

サーバー送信のコードは次のとおりです。

function ServerSend(message,server_socket,output_socket);

import java.net.ServerSocket
import java.io.*

try



output_stream   = output_socket.getOutputStream;
d_output_stream = DataOutputStream(output_stream);

% output the data over the DataOutputStream
% Convert to stream of bytes
fprintf(1, 'Writing %d bytes\n', length(message))

d_output_stream.writeBytes(char(message));
d_output_stream.flush;


catch


end


end
4

0 に答える 0