3

私はソフトウェアを書いていますが、ソケットを使用して ServerSocket を使用して Java アプリケーションに接続できないという制限を受けています。

どのポートに接続するかを定義できるので、URL接続を試してみようと思いました

例えば:

127.0.0.1:62666

サーバーアプリが接続をリッスンし、入力をjTextAreaに書き出すようにしています。ブラウザ経由でサーバー (127.0.0.1:62666) に接続すると、次のように出力されます。

GET / HTTP/1.1
GET /favicon.ico HTTP/1.1

URL 接続を介して ServerSocket に接続するための別のアプリがあります。

try{
        URL url = new URL("http://127.0.0.1:62666");
        URLConnection connection = url.openConnection();
        connection.setDoOutput(true);
        connection.connect();
        PrintWriter writer = new PrintWriter(connection.getOutputStream());
        writer.print("Hello");
        System.out.println("should have worked");
        writer.flush();
        writer.close();
    }catch(IOException e){
        e.printStackTrace();
    }

「動作するはずだった」というメッセージを出力しますが、サーバーの jTextArea には何も書き込みません。サーバー アプリのコードは次のようになります。

try{

        ServerSocket serverSock = new ServerSocket(62666);

        while(doRun){
            Socket sock = serverSock.accept();
            BufferedReader reader = new BufferedReader(new InputStreamReader(sock.getInputStream()));
            PrintWriter writer = new PrintWriter(sock.getOutputStream());

            InfoReader.gui.writeToTextArea(reader.readLine() + " From IP: " + sock.getInetAddress() + "\n");
            writer.println("Testing123");

            writer.close();

            reader.close();

        }
    }catch(IOException e){
        e.printStackTrace();
    }

注: ブラウザ経由で接続すると、「Testing123」というテキストが表示されます。

したがって、私が試している方法でこれを行う方法、またはServerSocketがアクセスされたURLを読み取る方法を考えているので、引数を(URLで)渡しながらURLを介してアクセスできます。

これが理にかなっていることを願っています:)

ありがとう、マイク。

4

4 に答える 4

1

何が起きているのか正確に把握できません。その OutputStream には何かおかしいところがあります。を追加

((HttpURLConnection) connection).getResponseCode();

connect()の前後のどこかでclose()、期待したものではないにしても、何か違うものが表示されるはずです。

おそらく、HTTP をハックとして使用する代わりに、完全な HTTP を使用する必要があります。今までと同じようにクライアントから HTTP を使用し、サーバーに組み込み HTTP サーバーをセットアップします。たとえば、 GrizzlySimple Framework、またはJettyなど、文字通り数行で実行できるものがいくつかあります。

于 2011-07-17T22:14:51.293 に答える