HTTPなどを調べ始めたばかりで、URLConnectionを使用してサーバーにURLを送信し、index.htmlページを(プレーンテキストとして)プルダウンする単純なJavaクライアントを作成しました。
現在、私は単純なサーバーで作業していますが、最初のハードル(おそらく2番目または3番目)で立ち往生しており、クライアントに適切に応答させることができません。
これがループ内の読み取りであり、FFやIEなどからでもHTTPリクエストを正常に読み取ります。
while((message = in.readLine()) != null)
{
System.out.println(message);
out.write("something");
}
問題は、有用なものに応答する方法がわからないことです。上記のコードで実行していることを実行させると、クライアントに「何か」を6回送信しますが(HTTP要求には6行あるため)、FF/IEなどには何も送信しません。
また、ループの後に印刷する行を追加したので、ループが壊れているようには見えませんSystem.out.println("test");
が、サーバーがそのポイントに到達することはないようです。readLine()は最初のHTTPリクエストの最後にnullを返す必要がありますか?
私は太陽とオラクルのウェブサイトで何かを読んでいますが、これがどのように機能するかについてはまだかなり行き詰まっています。
御時間ありがとうございます、
Infinitifizz
編集:おっと、コードをコピーするのを忘れました。
Server.java:
package exercise2;
import java.net.*;
public class Server
{
public static void main(String[] args) throws Exception
{
boolean listening = true;
ServerSocket server = new ServerSocket(8081);
while(listening)
{
Socket client = server.accept();
new ServerThread(client).start();
}
server.close();
}
}
ServerThread.java:
package exercise2;
import java.io.*;
import java.net.*;
public class ServerThread extends Thread
{
private Socket socket = null;
public ServerThread(Socket s)
{
this.socket = s;
}
public void run()
{
try
{
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String message, reply = "";
while((message = in.readLine()) != null)
{
System.out.println(message);
out.write("something");
}
System.out.println("test");
in.close();
out.close();
socket.close();
}
catch(IOException e)
{
System.err.println("error");
}
}
}