1

Is it possible to write a client-server code that can connect 2-different computers to play a multi-player game using sockets in java? Do these computers need to be connected by a cable? Or can I send the data through some other source? (Like internet..) Or is it enough if I know just the ip addresses of both computers and put that in in the sockets? Please tell me how I can do it.

1
  • 1
    Yes. No, wifi or bluetooth can be used for cable-less connection. Yes. And yes. "How" is too broad a question, so try a web search, i.e. do some research of your own. Commented Sep 29, 2018 at 7:04

1 Answer 1

3

You can connect computers that are on the same Wifi network. You will need to open a server and then open clients that connect to it. The following code may help:

Server.java

    ArrayList<Socket> clientSockets = new ArrayList<>();
    try {
            ServerSocket serverSocket = new ServerSocket(port); // port same as client
            InetAddress inetAddress = InetAddress.getLocalHost();
            System.out.println("Server opened at: "+inetAddress.getHostAddress());

            while (true) // this keeps the server listening
            {
                final Socket socket = serverSocket.accept(); // this accepts incomming connections
                clientSockets.add(socket); // adds current connection to an arraylist
                System.out.println(timestamp()+"Connection from "+socket.getInetAddress());
                    Thread t = new Thread(new Runnable() // Thread handles messages sent by client that just connected
                    {
                    @Override
                    public void run() {
                        try
                        {
                            while (socket.isConnected())
                            {
                                BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                                String fromClient = br.readLine();
                                if (fromClient != null)
                                {
                                 //use message from client
                                }
                                else // connection might have been reset by client
                                    {
                                        socket.close();
                                        clientSockets.remove(socket);
                                    }
                            }
                        } catch (SocketException e)
                        {
                          System.out.println("Disconnection from "+socket.getInetAddress());
                        } catch (IOException e) {}
                    }
                });
                t.start();
            }
            } catch (Exception e) {}

Client.java - add two buttons, one for connecting and one for sending

bConnect.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
                try {
                        InetAddress address = InetAddress.getByName(host); // host IPaddress
                        socket = new Socket(address, port); // port same as server
                        bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

                        final Timer time = new Timer(); // to get new server txt if it changes
                        TimerTask t = new TimerTask() {
                            @Override
                            public void run() {
                                try {
                                    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                                    String kry = br.readLine(); 
                                // use message from server
                                } catch (Exception e1) {
                                    JOptionPane.showMessageDialog(null, "The Server has just gone offline");
                                }
                            }
                        };
                        time.scheduleAtFixedRate(t, 0, 2000);
                }
                catch (Exception e1)
                {e1.printStackTrace();
                    JOptionPane.showMessageDialog(null, "The Server is not online");}
        }
    });



bSend.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            String textGekry = "what you are sending";
            if (!textGekry.equals(""))
            {
                String sendMessage = textGekry + "\n";
                try
                {
                    bw.write(sendMessage);
                    bw.flush();
                }
                catch (Exception e1)
                {
                    JOptionPane.showMessageDialog(null,"The Server is most likely offline");
                }
            }
        }
    });
Sign up to request clarification or add additional context in comments.

2 Comments

So, if both computers are connected on the same wi-fi network and I put in the IPAddress of the Server's computer in the other computer, I can connect them, right?
Yes In Server.java this line: InetAddress inetAddress = InetAddress.getLocalHost(); System.out.println("Server opened at: "+inetAddress.getHostAddress()); Gives the address which is used in Client.java socket = new Socket(address, port);

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.