Я работаю над проектом Java, где клиент отправляет несколько файлов на сервер, используя сокеты, на которых он должен выполнить некоторые операции и отправить результаты обратно.
Этот процесс работал совершенно нормально в моем компьюте IP -адрес сервера)
клиент успешно пингирует сервер , но команда telnet
показывает, что подключение сбое . {
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>
Я попытался запустить сервер на своем компьютере, а затем запустил клиент на другом ПК. Я ожидал, что содержимое файлов будет отправлено, но подключение по времени. Я пытался отключить брандмауэры и добавить правила, чтобы разрешить трафик для этого порта, все еще не разрешается, я уверен, что мой код работает, потому что он отлично работает на моем компьютере с помощью Localhost.
Подробнее здесь: https://stackoverflow.com/questions/794 ... -server-an
Java Sockets - Почему я не могу установить соединение между моей машиной (сервер) и машиной моего друга (клиент)? ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение