Я создал две программы Java, сервер и клиент, которые могут общаться друг с другом, если они выполняются на одном ПК.Подключение приложения с сервером
Сервер:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Server {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(30);
ServerSocket server;
try {
server = new ServerSocket(5555);
System.out.println("Server gestartet!");
while(true){
try {
Socket client = server.accept();
//Thread t = new Thread(new Handler(client));
//t.start();
executor.execute(new Handler(client));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
Handler (Сервер создает каждый раз, когда экземпляр, когда новый клиент присоединяется):
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
public class Handler implements Runnable {
private Socket client;
public Handler(Socket client) {
this.client = client;
}
@Override
public void run() {
try{
//Streams
OutputStream out = client.getOutputStream();
PrintWriter writer = new PrintWriter(out);
InputStream in = client.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
// ------------------------------
String s = null;
while((s = reader.readLine()) != null){
writer.write(s + "\n");
writer.flush();
System.out.println("Empfangen vom Client: " + s);
}
writer.close();
reader.close();
client.close();
}catch(Exception e){}
}
}
Клиент:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
try {
Socket client = new Socket("localhost", 5555);
System.out.println("Client gestartet!");
//Streams
OutputStream out = client.getOutputStream();
PrintWriter writer = new PrintWriter(out);
InputStream in = client.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
// ------------------------------
writer.write("Hallo Server!\n");
writer.flush();
String s = null;
while((s = reader.readLine()) != null){
System.out.println("Empfangen vom Server: " + s);
}
reader.close();
writer.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Мой вопрос теперь: Как сделать сервер на моем компьютере доступным через Интернет? Мой первый thougt было изменить что-то в конструкторе клиентского сокета
Socket client = new Socket("localhost", 5555);
«локальный», вероятно, означает, что сервер работает на том же компьютере, что и клиент.
Моей целью было бы иметь приложение на моем смартфоне, который подключается через Интернет к моему серверу, который работает на моем ПК. Он должен отправить мое сообщение, которое я ввел.
Если вы хотите, чтобы ваше приложение было доступно в Интернете, это действительно зависит от вашей ОС и настройки сети, как это стало возможным. Этот вопрос лучше подходит для форумов ServerFault или SuperUsers, так как в конце он не столько о коде, сколько настройке сервера. – Cheesebaron
Для клиента вы должны использовать интернет-адрес вашего маршрутизатора. Узнайте, звоните с whatismyip.com с вашего компьютера. Затем настройте маршрутизатор так, чтобы он пересылал входящие запросы на порт 5555 в IP-адрес вашего ПК. – greenapps
Скажите, пожалуйста, как это сделать на маршрутизаторе netgear. –