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

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

新規登録して質問してみよう
ただいま回答率
85.50%
HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

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

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

Q&A

解決済

1回答

4430閲覧

【java】 Apacheから200が返ってきません

退会済みユーザー

退会済みユーザー

総合スコア0

HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

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

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

0グッド

0クリップ

投稿2017/02/15 11:51

編集2017/02/15 12:24

###前提・実現したいこと
初めて投稿致します。
プログラミングを始めて3ヵ月のド素人です。

現在某教則本の学習中で、
Tcpクライアントのjavaプログラムを作成しております。
サーバーはApache Loungeよりhttpd-2.4.25-win64-VC14.zipを入手して使っております。
OSはwindows8.1です。
写経したTcpクライアントのコードは下記よりご参照ください。
client_send.txtよりリクエストを送信し、
client_recv.txtにレスポンスが保存される仕組みですが、
このレスポンスが何度試しても408のタイムアウトが返ってきます。

###発生している問題・エラーメッセージ
client_recv.txt

HTTP/1.1 408 Request Timeout Date: Wed, 15 Feb 2017 11:03:30 GMT Server: Apache/2.4.25 (Win64) Content-Length: 221 Connection: close Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>408 Request Timeout</title> </head><body> <h1>Request Timeout</h1> <p>Server timeout waiting for the HTTP request from the client.</p> </body></html>

ちなみにアクセスログはこんな感じです。

access.log

127.0.0.1 - - [15/Feb/2017:00:15:19 +0900] "GET /index.html HTTP/1.1" 408 221 127.0.0.1 - - [15/Feb/2017:00:17:21 +0900] "GET /index.html HTTP/1.1" 400 226 127.0.0.1 - - [15/Feb/2017:20:03:30 +0900] "GET /index.html HTTP/1.1" 408 221

###該当のソースコード
TcpClient.java

import java.io.*; import java.net.*; public class TcpClient { public static void main(String[] args) throws Exception { try (Socket socket = new Socket("localhost", 80); FileInputStream fis = new FileInputStream("client_send.txt"); FileOutputStream fos = new FileOutputStream("client_recv.txt")) { int ch; OutputStream output = socket.getOutputStream(); while ((ch = fis.read()) != -1) { output.write(ch); } InputStream input = socket.getInputStream(); while ((ch = input.read()) != -1) { fos.write(ch); } } catch (Exception ex) { ex.printStackTrace(); } } }

client_send.txt

GET /index.html HTTP/1.1 Accept: text/html, application/xhtml+xml, */* Accept-Language: ja-JP User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko Accept-Encoding: gzip, deflate Host: localhost:80 DNT: 1 Connection: Keep-Alive

###試したこと
まずはApacheサーバーをhttpd.exeを実行して立ち上げて、
コマンドプロントより【java TcpClient】で実行するという手順でリクエストを送っております。
ただし上述したように何度試してもタイムアウトしてしまいます。
ちなみにブラウザよりhttp://localhost/index.htmlを叩いて実行すると、ちゃんとindex.htmlが返ってくるので通信が成功しているようです。

どこに原因があるのかが分からず途方に暮れております。
何卒ご教示頂ける方がおりましたら幸いです。
長文、駄文失礼致しました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

HTTPのリクエストヘッダーは改行コードのみの空行で終了します。
client_send.txtの最終行に空行を1行入れてください。

408 Request Timeoutはサーバーで「クライアントからのリクエストを待っているが来ないのでタイムアウトしたよ」というエラーです。

投稿2017/02/15 12:01

Y.H.

総合スコア7914

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

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

退会済みユーザー

退会済みユーザー

2017/02/15 12:16

早速ご回答頂き有難うございました。 client_send.txtを確認したところ、最終行には既に空行が1行入っておりました。再度実行したのですが、やはりエラーは無くならないようです。。
Y.H.

2017/02/15 12:22

client_send.txt の改行コードは CR+LFにってますか? HTTPヘッダーの改行コードはCR+LFです。
退会済みユーザー

退会済みユーザー

2017/02/15 13:15

Atomで編集していたため、最終行の空行が自動削除されていることに気付いておりませんでした。。 空行挿入後に実行したところ無事200が返ってきました。 大変お世話になり、有難うございました。
Y.H.

2017/02/15 13:36

自動削除ですか。盲点ですね(^-^;;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問