質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

2回答

2621閲覧

JavaでTCPサーバーのみを作成し、ブラウザでアクセスした時に文字列を返したい

57svu

総合スコア28

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2017/06/05 06:17

いつもお世話になっています。
TCPサーバーを作成し、ブラウザにてローカルホストとポート番号を叩くと、Hello Worldと表示されるようにしたいのですが
行き詰っております。

また参考にしてるサイトの構文を模写し、まずは動かしてみようと思ったのですがこれもうまくいきません。
参考サイトではアクセスがあった時に日付を表示する仕様なので、そこをいじって、stringのHelloWorldを差し込んでみたのですが....
反応がありません。

現状では、eclipseではエラーはありませんが
ブラウザでアクセスした際に、ブラウザでは画面が表示されずに、ずっとバッファリング?丸印が回っています。
コンソールではgetリクエストが表示されています。
クライアントからの接続を待ちます。クライアント接続
GET / HTTP/1.1
Host: 127.0.0.1:9009
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
Accept-Encoding: gzip, deflate, sdch, br

このような表示です。

ご指導ご鞭撻のほど宜しくお願い致します。

以下が作成したコードです。

Java

1 2package tcpServer; 3 4import java.io.BufferedReader; 5import java.io.IOException; 6import java.io.InputStream; 7import java.io.InputStreamReader; 8import java.io.PrintWriter; 9import java.net.ServerSocket; 10import java.net.Socket; 11 12public class TcpServer extends ServerSideTestByJava { 13 14 public static void main(String[] args) throws IOException { 15 16 // サーバーソケットクラスの listener を生成 引数でポート番号を指定 17 ServerSocket listener = new ServerSocket(9009); 18 // try catch構文で実行 19 try { 20 while(true){ 21 22 System.out.println("クライアントからの接続を待ちます。"); 23 // ソケットクラスのsocketを生成 24 // 内容はアクセスがあるまでクラスserverのアクセプトメソッドにて待ち続けます 25 Socket socket = listener.accept(); 26 27 try{ 28 System.out.println("クライアント接続"); 29 // クライアントから受け取った内容をインプットストリームクラスinputに格納 30 InputStream input = socket.getInputStream(); 31 32 String sayHello = "Hello , World!"; 33 34 // 以下が模写部分 35 PrintWriter out = new PrintWriter(socket.getOutputStream(), true); 36 out.println(sayHello); 37 // 模写終わり 38 39 // バッファリングリーダークラスのinputNeoを生成 40 // 内容はクライアントから受け取った情報の全て 41 BufferedReader inputNeo = 42 new BufferedReader(new InputStreamReader(socket.getInputStream())); 43 44 // 文字列 answerを定義 内容はクライアントから受け取った情報の①行 45 String answer = inputNeo.readLine(); 46 47 // クライアントから受け取った内容の行がnullになるまで繰り返す 48 while (answer != null){ 49 50 // 内容の①行を出して改行 51 System.out.println(answer); 52 53 // 文字列一行answerのstringに 54 // クライアントから受け取った情報の一行が格納される 55 answer = inputNeo.readLine(); 56 57 } 58 59 } finally{ 60 socket.close(); 61 } 62 } 63 } finally { 64 listener.close(); 65 } 66 } 67} 68 69

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

以前の質問の時と同じで、ブラウザにhttp://と打ち込んでいるようにHTTPによる通信を期待しているわけですから、HTTPに則ったやり取りをしなければ、ブラウザで使えません

もちろん、Telnetなど単なるターミナルからつなぐとか、ブラウザ以外のクライアントに返すとかであれば、好きな方法で実装して構いません。

投稿2017/06/05 06:27

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

57svu

2017/06/05 07:06

ご指摘ありがとうございます。 ということは、httpレスポンスを作成する作業が必要になるということでしょうか。 そして、参考サイトなどのTCPサーバーで文字列を表示したりするのは、クライアントを作成しているためにそのまま文字列が表示されるということでしょうか...
maisumakun

2017/06/05 07:12

TCPサーバーの場合、Telnetなど「通信だけで済む」ような環境からアクセスしているんだと思います。
57svu

2017/06/05 07:44

環境が違うのですね。 ちなみにHTTPレスポンスで調べていると この場合、サーブレットを使うべきなのでしょうか。
guest

0

HTTP get メソッドは取得できたので
レスポンスを返すのみ

そこでレスポンスの構成
ステータスコード
ヘッダー
空行
ボディ

が必要

その前にBufferedWriter outputを作成し
Output.write(Sting str);
と追記しました
strの中身は

"HTTP / 1.1 200 OK ¥n"

  • "Contents-Length: 14"
  • "¥n"
  • "¥n"
  • "Hello , World!";

です
形式を変更したのですが
依然反応はありません
ただ再度更新すると
コンソール画面には
レスポンス文の内容が表示されます
ブラウザに表示させたいです,

投稿2017/06/05 13:01

編集2017/06/06 06:01
57svu

総合スコア28

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問