-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRPCServer.java
More file actions
88 lines (70 loc) · 2.94 KB
/
Copy pathRPCServer.java
File metadata and controls
88 lines (70 loc) · 2.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import java.io.*;
import java.net.*;
import java.util.ArrayList;
import java.util.List;
public class RPCServer {
private static List<String> messages = new ArrayList<>();
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(5000);
System.out.println("RPC Server is running on port 5000...");
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("Client connected: " + clientSocket.getInetAddress());
// Handle client in a new thread
new Thread(() -> handleClient(clientSocket)).start();
}
} catch (IOException e) {
System.err.println("Server error: " + e.getMessage());
e.printStackTrace();
}
}
private static void handleClient(Socket clientSocket) {
try {
BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
String request;
while ((request = in.readLine()) != null) {
System.out.println("Received request: " + request);
String response = processRequest(request);
out.println(response);
if (request.equals("QUIT")) {
break;
}
}
clientSocket.close();
System.out.println("Client disconnected");
} catch (IOException e) {
System.err.println("Client handler error: " + e.getMessage());
}
}
private static String processRequest(String request) {
String[] parts = request.split("\\|", 2);
String method = parts[0];
switch (method) {
case "HELLO":
String name = parts.length > 1 ? parts[1] : "Guest";
return "Hello, " + name + "!";
case "ADD":
String[] numbers = parts[1].split(",");
int a = Integer.parseInt(numbers[0]);
int b = Integer.parseInt(numbers[1]);
return String.valueOf(a + b);
case "SEND":
String message = parts.length > 1 ? parts[1] : "";
messages.add(message);
System.out.println("Received from client: " + message);
return "Message received";
case "GETALL":
if (messages.isEmpty()) {
return "No messages";
}
return String.join(";;", messages);
case "QUIT":
return "Goodbye";
default:
return "Unknown method";
}
}
}