2016-08-08 4 views
1

Я пытаюсь написать код, который позволит мне подключиться к удаленному серверу и получить от него ответ. Удаленный адрес: www.euref-ip.net:2101Не удается получить ответ с удаленного сервера

При попытке подключиться к нему с веб-страницы он отлично работает. Однако, когда я пытаюсь подключиться через мой код Java, я не могу получить ответ. Вот мой код до сих пор:

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);} 
}} 

Сейчас переменная ln всегда 0, и я читаю пустой ответ. Что я делаю неправильно? Какие-либо предложения? Любая помощь будет оценена по достоинству.

ответ

0

Ваш HTTP-запрос неполный, вам нужно добавить лишнюю пустую строку в конце, указывающую конец раздела заголовка, который также находится здесь в конце запроса.

Try с этим:

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

ОК, спасибо, я попробую. Однако первая добавленная строка не появляется в запросе, когда я пытаюсь подключиться из одного и того же веб-браузера к серверу, запущенному из Java-кода, таким образом я могу распечатать запрос. –

+0

Это сработало. Кажется, что критическая вещь - лишняя пустая строка в конце. Спасибо. –

Смежные вопросы