user2612619
user2612619

Reputation: 1129

Client Not Connecting to Server

So I have my server that looks like this

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

And when I run it, everything goes fine. I also have my client which looks like this.

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

After running my client I get this in the console.

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 looks like this

Socket client = new Socket(serverName, port);

EDIT:

After changing to a valid server address when I run the code I only get certain statements to run and then it just times out. Why is this?

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!

Upvotes: 0

Views: 1132

Answers (2)

Atul Soman
Atul Soman

Reputation: 4720

Its timing out because in constructor you are setting a 20 sec time to live.

serverSocket.setSoTimeout(20000);

Remove this and you should be fine.

Upvotes: 1

Reimeus
Reimeus

Reputation: 159754

The server name is assigned to the String literal "Server" rather than a valid host address.

Upvotes: 1

Related Questions