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

17

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

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

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

Ваш Ответ

4   ответа
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();
    }
}
Error: User Rate Limit Exceeded
0

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

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");
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы