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