17

Вопрос по sockets, java – Можно ли запустить сервер сокетов и клиент сокетов на одном компьютере?

В Java можно создать сервер сокетов и клиент сокетов, возможно ли иметь экземпляр запущенного сервера сокетов и клиент сокета / сервера, который получает данные от сервера сокетов на той же машине?

например, сервер сокетов работает на порту 60010 и клиент сокета работает на той же машине, соединяющейся с этим портом через сокет, или мне нужно будет на новой машине и добавить его в мою сеть? Если он имеет уникальный IP-адрес и номер порта, работающие на уровне TCP / IP.

  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Да, это определенно возможно. Это легко опробовать и убедиться в этом самому.

    от ulmangt
  • 1

    Да

    вы можете запустить клиент и сервер на одном компьютере. Я делаю это все время для развития. Если у вас возникли проблемы, некоторые маршрутизаторы могут пересылать пакеты обратно себе. Попробуйте использовать localhost вместо вашего внешнего IP для разработки.

  • 3

    Да, вы можете иметь следующее на той же машине:

    ServerSocket server = new ServerSocket(60010);
    Socket client = server.accept();
    

    Где-нибудь еще:

    Socket socket = new Socket("localhost", 60010);
    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
    out.println("Hello server");
    

  • 0

    Да, это вполне возможно. Каждая ОС имеет

    петлевой интерфейс. Вы можете подключить несколько клиентов к одному серверу на вашем компьютере. Этот вид связи происходит через интерфейс обратной связи.

  • 20

    Вот простой запускаемый пример

    с которого можно начать. Он запускает два потока, один сServerSocket и тот, который делаетSocket подключение. Один постоянно отправляет строки, а другой печатает их.

    Вы должны просто иметь возможность запускать этот класс как есть.

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    public class SocketTest {
        public static void main(String[] args) throws IOException {
    
            startServer();
            startSender();
        }
    
        public static void startSender() {
            (new Thread() {
                @Override
                public void run() {
                    try {
                        Socket s = new Socket("localhost", 60010);
                        BufferedWriter out = new BufferedWriter(
                                new OutputStreamWriter(s.getOutputStream()));
    
                        while (true) {
                            out.write("Hello World!");
                            out.newLine();
                            out.flush();
    
                            Thread.sleep(200);
                        }
    
                    } catch (UnknownHostException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    
        public static void startServer() {
            (new Thread() {
                @Override
                public void run() {
                    ServerSocket ss;
                    try {
                        ss = new ServerSocket(60010);
    
                        Socket s = ss.accept();
    
                        BufferedReader in = new BufferedReader(
                                new InputStreamReader(s.getInputStream()));
                        String line = null;
                        while ((line = in.readLine()) != null) {
                            System.out.println(line);
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    }