2016-08-08 4 views
1

Ich versuche, einen Code zu schreiben, mit dem ich eine Verbindung zu einem Remote-Server herstellen und eine Antwort von ihm erhalten kann. Die entfernte Adresse lautet: www.euref-ip.net:2101Kann keine Antwort von einem Remote-Server erhalten

Wenn Sie versuchen, von einer Webseite zu verbinden, funktioniert es gut. Jedoch, wenn ich versuche, durch meinen Java-Code zu verbinden, kann ich keine Antwort zurückbekommen. Hier ist mein Code so weit:

public class Client implements Runnable{ 
private String nServer = ""; 
private int nPort = 0; 

public Client(String server, int port){ 
    this.nServer = server; 
    this.nPort = port; 
} 

@Override 
public void run() { 
    try { 
     SocketAddress sockaddr = new InetSocketAddress(nServer, nPort); 
     Socket s = new Socket(); 
     s.connect(sockaddr, 10 * 1000); 
     if (s.isConnected()) { 
      s.setSoTimeout(20 * 1000); 
      DataOutputStream out = new DataOutputStream (s.getOutputStream()); 
      DataInputStream in = new DataInputStream (s.getInputStream()); 
      while (true) { 
       // send a message to the server 
       String requestmsg = "GET/HTTP/1.0\r\n"; 
       requestmsg += "User-Agent: Client v1\r\n"; 
       requestmsg += "Accept: */* \r\n"; 
       requestmsg += "Connection: keep alive\r\n"; 
       out.write(requestmsg.getBytes()); 
       out.flush(); 

       // receive a response 
       int ln = in.available(); 
       byte [] bytes = new byte [ln]; 
       in.read(bytes); 
       System.out.println(new String(bytes) + "\n"); 
       Thread.sleep(2000); 
      } 
     } 
    } 
    catch (UnknownHostException ex) {System.out.println(ex);} 
    catch (IOException ex) {System.out.println(ex);} 
    catch (InterruptedException ex) {System.out.println(ex);} 
}} 

Im Augenblick ist die ln Variable ist immer 0 und ich leere Antwort lese. Was mache ich falsch? Irgendwelche Vorschläge? Jede Hilfe wäre willkommen.

Antwort

0

Ihre HTTP-Anfrage ist unvollständig, Sie müssen eine zusätzliche leere Zeile am Ende hinzufügen, die das Ende des Header-Abschnitts angibt, der auch hier das Ende der Anfrage darstellt.

Versuchen mit diesem:

String requestmsg = "GET/HTTP/1.0\r\n"; 
... 
requestmsg += "Connection: keep alive\r\n"; 
requestmsg += "\r\n"; 
+0

OK, danke ich versuchen. Die erste Zeile, die Sie hinzugefügt haben, erscheint jedoch nicht in der Anfrage, wenn ich versuche, vom selben Webbrowser aus eine Verbindung zu einem Server herzustellen, der von einem Java-Code aus ausgeführt wird. Auf diese Weise kann ich die Anfrage ausdrucken. –

+0

Es hat funktioniert. Es scheint, dass das kritische Ding die extra leere Linie am Ende ist. Vielen Dank. –

Verwandte Themen