2013-12-09 2 views
0

Так у меня есть сервер, который выглядит как этотКлиент не подключается к серверу

import java.net.*; 
import java.io.*; 

public class Server extends Thread { 

    private ServerSocket serverSocket; 

    public Server(int port) throws IOException { 
     serverSocket = new ServerSocket(port); 
     serverSocket.setSoTimeout(20000); 
    } 

    public void run() { 

     while(true) { 

      try { 

       System.out.println("Waiting for client on port " + 
         serverSocket.getLocalPort() + "..."); 
       Socket server = serverSocket.accept(); 
       System.out.println("Just connected to " 
         + server.getRemoteSocketAddress()); 
       DataInputStream in = 
         new DataInputStream(server.getInputStream()); 
       System.out.println(in.readUTF()); 
       DataOutputStream out = 
         new DataOutputStream(server.getOutputStream()); 
       out.writeUTF("Thank you for connecting to " 
         + server.getLocalSocketAddress() + "\nGoodbye!"); 
       server.close(); 
      }catch(SocketTimeoutException s) 
      { 
       System.out.println("Socket timed out!"); 
       break; 
      }catch(IOException e) 
      { 
       e.printStackTrace(); 
       break; 
      } 
     } 
    } 
    public static void main(String [] args) { 

     int port = 5000; 
     try { 
      Thread t = new Server(port); 
      t.start(); 
     }catch(IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

И когда я запускаю его, все идет хорошо. У меня также есть мой клиент, который выглядит так.

import java.net.*; 
import java.io.*; 

public class Client { 

    public static void main(String [] args) { 

     String serverName = "Server"; 
     int port = 5000; 

     try { 

     System.out.println("Connecting to " + serverName + " on port " + port); 
     Socket client = new Socket(serverName, port); 
     System.out.println("Just connected to " + client.getRemoteSocketAddress()); 
     OutputStream outToServer = client.getOutputStream(); 
     DataOutputStream out = new DataOutputStream(outToServer); 

     out.writeUTF("Hello from " + client.getLocalSocketAddress()); 
     InputStream inFromServer = client.getInputStream(); 
     DataInputStream in = new DataInputStream(inFromServer); 
     System.out.println("Server says " + in.readUTF()); 
     client.close(); 

     }catch(IOException e) { 

     System.out.println("Error!"); 
     } 
    } 
} 

После запуска моего клиента я получаю это в консоли.

Connecting to Server on port 5000 

java.net.UnknownHostException: Server 
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178) 
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
at java.net.Socket.connect(Socket.java:579) 
at java.net.Socket.connect(Socket.java:528) 
at java.net.Socket.<init>(Socket.java:425) 
at java.net.Socket.<init>(Socket.java:208) 
at maple.Client.main(Client.java:16) 

Line 16 выглядит следующим образом

Socket client = new Socket(serverName, port); 

EDIT:

После перехода на действительный адрес сервера, когда я запускаю код, который я только получить определенные заявления для запуска, а затем он просто время вышло. Почему это?

Waiting for client on port 5000... 
Just connected to /127.0.0.1:57355 
Hello from /127.0.0.1:57355 
Waiting for client on port 5000... 
Socket timed out! 
+0

Когда вы получаете исключение, не просто печатайте '' Error! "'. Это бесполезно. Распечатайте само исключение. И когда вы получаете такое исключение, как «SocketTimeoutException», которое могло возникнуть из «accept()» или одного из методов чтения, важно также печатать или записывать трассировку стека. В настоящее время здесь недостаточно информации, чтобы ответить на ваш вопрос. – EJP

ответ

1

Имя сервера присваивается строка символов "Server", а не действительный адрес хоста.

+0

Теперь мой сервер отключается, прежде чем все будет завершено, почему это так? – user2612619

+0

Сокет истекает на сервере, ожидая новых подключений, просто. Посмотрите на [Многопоточный сервер Oracles] (http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/networking/sockets/ примеры/KKMultiServer.java). Обратите внимание, что сам сервер не является потоковым, но клиентские соединения. – Reimeus

1

Его тайм-аут, потому что в конструкторе вы настраиваете время на 20 секунд для жизни.

serverSocket.setSoTimeout(20000); 

Удалить это, и все должно быть в порядке.

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