Я только начал изучать HTTP и т. Д. И написал простой Java-клиент, который использует URLConnection для отправки URL-адреса на сервер и запускает страницу index.html (в виде простого текста).
Сейчас я работаю на простом сервере, но я застрял на первом препятствии (ну, может быть, на втором или третьем), я не могу заставить его правильно ответить клиенту.
Вот чтение в цикле, и оно прекрасно читает HTTP-запрос, даже из FF, IE и т. Д .:
while((message = in.readLine()) != null)
{
System.out.println(message);
out.write("something");
}
Проблема в том, что я не знаю, как заставить его ответить на что-нибудь полезное. Если я позволяю ему делать то, что он делает в приведенном выше коде, он отправляет «что-то» 6 раз моему клиенту (так как в HTTP-запросе есть 6 строк), но FF / IE и т. Д.
Кроме того, кажется, что он никогда не прерывает цикл, поскольку я добавил строку System.out.println("test");
для печати после цикла, но сервер никогда не достигает этой точки, не так ли? Должен ли readLine () возвращать ноль в конце первого HTTP-запроса?
Я читал что-то на сайтах о солнце и оракуле, но все еще не могу понять, как это должно работать.
Спасибо за ваше время,
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");
}
}
}