Ich arbeite an einem Java -Projekt, bei dem ein Client einige Dateien mit Steckdosen an den Server sendet, bei dem er einige Vorgänge ausführen und die Ergebnisse zurücksenden sollte. Mit meinem PC perfekt arbeiten, aber als ich den Client auf dem PC meines Freundes leitete (nachdem wir uns mit demselben Netzwerk verbunden und die IP in der Client.java von Localhost auf die IP des Servers geändert haben), wurde der Verbindungsablauf ausgeglichen.
Der Client stellt den Server erfolgreich an, aber der Befehl telnet
< /code> zeigt, dass die Verbindung fehlgeschlagen ist. Wir haben alles ausprobiert, behinderte Firewall, erlaubte eingehende und ausgehende Verbindungen von diesem Port, deaktiviertes Antivirus, stellte sicher > Jede Hilfe oder Vorschlag wird sehr geschätzt.package server;
import common.ServerInterface;
import common.Task;
import common.Result;
import java.rmi.server.UnicastRemoteObject;
import java.rmi.RemoteException;
import java.rmi.Naming;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.*;
import java.util.Stack;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class Server extends UnicastRemoteObject implements ServerInterface {
private static final int PORT = 12345; // Listening Port
protected Server() throws RemoteException {
super();
}
private Stack taskStack = new Stack(); // Tasks
private Map results = new HashMap(); // stores result as task ID
@Override
public synchronized Task getTask() throws RemoteException {
if (!taskStack.isEmpty()) {
return taskStack.pop(); // Retuns task if available
}
return null; // no task available
}
@Override
public synchronized void returnResult(Result result, String taskId) throws RemoteException {
// stores the result
results.put(taskId, result);
System.out.println("Results were received from Worker through RMI for the task " + taskId + ": " + result);
}
public void startSocketServer() {
new Thread(() -> {
try (ServerSocket serverSocket = new ServerSocket(PORT)) {
System.out.println("Server is waiting for a connection on port " + PORT);
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("Client connected : " + clientSocket.getInetAddress());
// Gérer la connexion client
new Thread(() -> handleClient(clientSocket)).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
private void handleClient(Socket clientSocket) {
try (InputStream is = clientSocket.getInputStream();
DataInputStream dis = new DataInputStream(is);
OutputStream os = clientSocket.getOutputStream();
DataOutputStream dos = new DataOutputStream(os)) {
int fileCount = dis.readInt(); // read the number
String taskId = UUID.randomUUID().toString(); // generate ID for task
Task task = new Task(taskId); // create a new task
int textFileCount = 0;
for (int i = 0; i < fileCount; i++) {
String fileName = dis.readUTF(); // read file name
long fileSize = dis.readLong(); // read file size
byte[] fileContent = new byte[(int) fileSize];
dis.readFully(fileContent); // read all files on memory
if (fileName.endsWith(".txt")) {
String fileContentStr = new String(fileContent); // convert matrices to string
if (textFileCount == 0) {
task.setDataFile1Content(fileContentStr);
} else if (textFileCount == 1) {
task.setDataFile2Content(fileContentStr);
}
textFileCount++;
} else if (fileName.endsWith(".jar")) {
task.setOperationFileContent(fileContent); // stores in binary
}
}
taskStack.push(task); // Add task
System.out.println("Tak added : " + task);
// wait for result
while (!results.containsKey(taskId)) {
Thread.sleep(1000);
}
// send result back to the client
Result result = results.get(taskId);
dos.writeUTF(result.getValue());
System.out.println("Result sent to client : " + result);
clientSocket.close();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
Server server = new Server();
java.rmi.registry.LocateRegistry.createRegistry(1099);
Naming.rebind("Server", server);
System.out.println("Server RMI is ready");
// run server
server.startSocketServer();
} catch (Exception e) {
e.printStackTrace();
}
}
}
< /code>
client.java
import java.io.*;
import java.net.Socket;
public class Client {
public void sendTask(String serverAddress, String[] filePaths) {
try (Socket socket = new Socket(serverAddress, 12345);
OutputStream os = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
InputStream is = socket.getInputStream();
DataInputStream dis = new DataInputStream(is)) {
// Send number of files
dos.writeInt(filePaths.length);
for (String filePath : filePaths) {
File file = new File(filePath);
if (!file.exists()) {
System.err.println("Error : File " + filePath + " does not exist !");
return;
}
// send file name
dos.writeUTF(file.getName());
// send file size
dos.writeLong(file.length());
// send file content
try (FileInputStream fis = new FileInputStream(file)) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
dos.write(buffer, 0, bytesRead);
}
}
}
System.out.println("Task was sent to server");
// receive final result
String result = dis.readUTF();
System.out.println("Results were received from the server : " + result);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Client client = new Client();
String[] files = {
"resources/data/A.txt",
"resources/data/B.txt",
"resources/operations/operation.jar"
};
client.sendTask("192.168.43.19", files);
}
}
< /code>
Ich habe versucht, den Server auf meinem PC auszuführen, dann habe ich den Client auf einem anderen PC ausgeführt. Ich habe erwartet, dass die Dateien -Inhalte gesendet werden, aber die Verbindungsabläufe. Ich habe versucht, Firewalls zu deaktivieren und Regeln hinzuzufügen, um den Datenverkehr für diesen Port zu ermöglichen, der immer noch nicht behoben ist. Ich bin sicher, mein Code funktioniert, weil er mit Localhost perfekt auf meinem PC funktioniert.
Warum kann ich keine Verbindung zwischen meinem Computer (Server) und dem Computer meines Freundes (Client) herstellen? ⇐ Java
-
- Similar Topics
- Replies
- Views
- Last post