Simple socket with test client

This commit is contained in:
Jesper Saastamoinen 2024-12-13 08:28:05 +01:00
parent 8f027bace3
commit c44334f196
4 changed files with 109 additions and 0 deletions

View file

@ -1,5 +1,7 @@
package com.jsaasta.froj.stdlib;
import com.jsaasta.froj.stdlib.socket.SocketServer;
import java.util.HashMap;
import java.util.Map;
@ -12,6 +14,7 @@ public class Stdlib {
classes.put("clock", new Clock());
classes.put("input", new Input());
classes.put("fileReader", new FileReader());
classes.put("socket", new SocketServer());
}
public static Map<String, Object> define(){

View file

@ -0,0 +1,34 @@
package com.jsaasta.froj.stdlib.socket;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
class ClientHandler extends Thread {
private Socket socket;
public ClientHandler(Socket socket) {
this.socket = socket;
}
public void run() {
try {
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
byte[] buffer = new byte[1024];
int bytesRead = in.read(buffer);
String message = new String(buffer, 0, bytesRead);
System.out.println("Received message from client: " + message);
String response = "Hello from froj!";
out.write(response.getBytes());
// Close the socket
socket.close();
} catch (IOException e) {
System.out.println("Error handling client connection: " + e.getMessage());
}
}
}

View file

@ -0,0 +1,34 @@
package com.jsaasta.froj.stdlib.socket;
import java.io.*;
import java.net.Socket;
public class SocketClient {
public static void main(String[] args) throws IOException {
while(true) {
Socket socket = new Socket("localhost", 8000);
System.out.println("Connected to server");
// Get input and output streams
OutputStream out = socket.getOutputStream();
InputStream in = socket.getInputStream();
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(input);
// Send message to server
String message = reader.readLine();
out.write(message.getBytes());
// Read response from server
byte[] buffer = new byte[1024];
int bytesRead = in.read(buffer);
String response = new String(buffer, 0, bytesRead);
System.out.println("Received response from server: " + response);
// Close the socket
socket.close();
}
}
}

View file

@ -0,0 +1,38 @@
package com.jsaasta.froj.stdlib.socket;
import com.jsaasta.froj.FrojCallable;
import com.jsaasta.froj.Interpreter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.List;
public class SocketServer implements FrojCallable {
@Override
public int arity() {
return 1;
}
@Override
public Object call(Interpreter interpreter, List<Object> arguments) {
try {
Double param = (Double) arguments.get(0);
int port = param.intValue();
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("Server started. Listening for incoming connections...");
while (true) {
Socket socket = serverSocket.accept();
System.out.println("Incoming connection from " + socket.getInetAddress());
ClientHandler clientHandler = new ClientHandler(socket);
clientHandler.start();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}