Я новичок во всех этих сетевых вещах. Я недавно работал над клиентом и сервером в Java. Клиент подключается к серверу так, как должен, а также получает ответ от сервера. Все работает нормально, пока клиент и сервер работают на компьютерах в одной сети. Когда я пытаюсь подключиться к серверу с компьютера, который не находится в той же сети, что и сервер, клиент просто не находит сервер.
Что я могу сделать, чтобы клиент мог подключиться к серверу из другой сети? И значит ли это, что я могу подключиться к серверу со всего мира?
Здесь вы можете найти код моего сервера:
package zwei;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static int Port = 55571;
static ServerSocket ServerSocket;
static Socket ClientSocket;
static PrintWriter out;
static BufferedReader in;
public static void main(String[] args) throws IOException{
handleConnection(Port);
}
static void handleConnection(int port) throws IOException {
ServerSocket = new ServerSocket(port);
System.out.println("Waiting for connections...");
ClientSocket = ServerSocket.accept();
System.out.println("Connected to Client!");
out = new PrintWriter(new OutputStreamWriter(ClientSocket.getOutputStream()));
in = new BufferedReader(new InputStreamReader(ClientSocket.getInputStream()));
while(true) {
try {
char[] buffer = new char[200];
int AnzahlZeichen = in.read(buffer, 0, 200);
String message = new String(buffer, 0, AnzahlZeichen);
System.out.println("[Client] " + message);
out.print("Dear Client, I got your message! [ -" + message + "- ]");
out.flush();
if (message.equals("DISCONNECT")) {
System.out.println("Client disconnected");
ServerSocket.close();
ClientSocket.close();
handleConnection(Port);
}
}
catch(Exception e) {
System.out.println("Client disconnected");
ServerSocket.close();
ClientSocket.close();
handleConnection(Port);
}
}
}
}
И здесь вы можете найти код клиента:
package zwei;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class Client extends JFrame{
static int port = 55570;
static String ServerAdress = ""; //Here I put the IP-Adress of the computer the server is running on
static Socket ClientSocket;
static PrintWriter out;
static BufferedReader in;
JTextField EnterMessage;
JButton SendMessage;
Client(){
this.setLayout(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setResizable(false);
this.setSize(700, 700);
//this.setTitle("Vokabeltrainer");
EnterMessage = new JTextField();
EnterMessage.setBounds(50, 50, 500, 50);
this.add(EnterMessage);
SendMessage = new JButton("send");
SendMessage.setBounds(50, 150, 100, 100);
SendMessage.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
SendMessageToServer(EnterMessage.getText());
ReceiveMessageFromServer();
} catch (IOException e1) {
e1.printStackTrace();
}
}});
this.add(SendMessage);
}
private void connectToServer(String ServerAdress, int port) throws IOException {
try {
this.ClientSocket = new Socket(ServerAdress,port);
System.out.println("Successfully established a connection to the server on port " + port + " .");
}
catch(Exception e) {
System.out.println("An error occured while trying to connect to the server!");
System.out.println("");
e.printStackTrace();
}
}
private void SendMessageToServer(String Nachricht) throws IOException {
out = new PrintWriter(new OutputStreamWriter(ClientSocket.getOutputStream()));
out.print(Nachricht);
out.flush();
}
private void ReceiveMessageFromServer() throws IOException{
in = new BufferedReader(new InputStreamReader(ClientSocket.getInputStream()));
char[] buffer = new char[200];
int AnzahlZeichen = in.read(buffer, 0, 200);
String message = new String(buffer, 0, AnzahlZeichen);
System.out.println("[Server] " + message);
}
public static void main(String[] args) throws Exception {
Client client = new Client();
client.connectToServer(ServerAdress, port);
//in = new BufferedReader(new InputStreamReader(ClientSocket.getInputStream()));
}
}