Ceci est mon code du côté client:Envoyer HTTPRequest en Java en utilisant package java.net
import java.io.*;
import java.net.*;
public class httpClient {
public void TcpSocket()
{
String sentence;
String modifiedSentence;
StringBuffer contents= null;
//open a socket connection on port 80
try{
Socket clientSocket = new Socket("localhost", 8080);
//send message to the server
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
//read message from the server
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
//read http request message from a file
File file = new File("/home/x/Desktop/test.txt");
contents = new StringBuffer();
BufferedReader reader = null;
reader = new BufferedReader(new FileReader(file));
String text = null;
// repeat until all lines is read
while ((text = reader.readLine()) != null)
{
contents.append(text).append(System.getProperty("line.separator"));
}
//end reading file
//Send message
sentence = contents.toString();
outToServer.writeBytes(sentence + '\n');
modifiedSentence = inFromServer.readLine();
System.out.println("FROM SERVER: " + modifiedSentence);
clientSocket.close();
}
catch (UnknownHostException e) {
System.err.println("Don't know about host");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection");
System.exit(1);
}
}
public static void main(String args[])
{
httpClient cl = new httpClient();
cl.TcpSocket();
}
}
et mon serveur http:
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Executors;
import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
public class HttpServerDemo {
public static void main(String[] args) throws IOException {
InetSocketAddress addr = new InetSocketAddress(8080);
HttpServer server = HttpServer.create(addr, 0);
server.createContext("/", new MyHandler());
server.setExecutor(Executors.newCachedThreadPool());
server.start();
System.out.println("Server is listening on port 8080");
}
}
class MyHandler implements HttpHandler {
public void handle(HttpExchange exchange) throws IOException {
System.out.println("I am in Server request Handler"); <---------------Request is not coming here
String requestMethod = exchange.getRequestMethod();
if (requestMethod.equalsIgnoreCase("GET")) {
Headers responseHeaders = exchange.getResponseHeaders();
responseHeaders.set("Content-Type", "text/plain");
exchange.sendResponseHeaders(200, 0);
OutputStream responseBody = exchange.getResponseBody();
Headers requestHeaders = exchange.getRequestHeaders();
Set<String> keySet = requestHeaders.keySet();
Iterator<String> iter = keySet.iterator();
while (iter.hasNext()) {
String key = iter.next();
List values = requestHeaders.get(key);
String s = key + " = " + values.toString() + "\n";
responseBody.write(s.getBytes());
}
responseBody.close();
}
}
}
Demande J'envoie:
GET /index.html HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.3) Gecko/20091020 Ubuntu/9.10 (karmic) Firefox/3.5.3
Accept:/
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Mais ma demande ne parvient pas au gestionnaire de requêtes de HttpServerDemo.java.
Mise à jour
Je ne suis pas en mesure de déboguer mon code, car il est ne pas frapper le gestionnaire de requêtes sur le serveur et il fonctionne très bien dans un vrai navigateur . Ceci est la réponse du vrai navigateur quand j'ouvre http://localhost:8080
Host = [localhost:8080]
Accept-charset = [ISO-8859-1,utf-8;q=0.7,*;q=0.7]
Accept-encoding = [gzip,deflate]
Connection = [keep-alive]
Keep-alive = [300]
Accept-language = [en-us,en;q=0.5]
User-agent = [Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.3) Gecko/20091020 Ubuntu/9.10 (karmic) Firefox/3.5.3]
Accept = [text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8]
Pouvez-vous nous montrer à quoi ressemble votre sortie lorsque vous exécutez les programmes? Je pense que ce dont vous avez besoin est un appel à flush() le DataOutputStream, mais je ne sais pas jusqu'où votre code est arrivé quand vous l'avez exécuté. – MikeTheReader
Je ne suis pas capable de déboguer puisque la requête ne va pas dans 'handle (échange HttpExchange)' et dans mon client 'System.out.println (" FROM SERVER: "+ modifiedSentence)' Je reçois 'FROM SERVER: null' – zengr
Cela fonctionne à partir du vrai navigateur. Le problème est, je ne suis pas capable de déboguer mon serveur, c'est pourquoi j'ai dû "vider" le code source entier. La demande ne frappe pas mon gestionnaire de mon code, mais fonctionne bien à partir d'un vrai navigateur. – zengr