Simple socket with test client
This commit is contained in:
parent
8f027bace3
commit
c44334f196
4 changed files with 109 additions and 0 deletions
|
@ -1,5 +1,7 @@
|
||||||
package com.jsaasta.froj.stdlib;
|
package com.jsaasta.froj.stdlib;
|
||||||
|
|
||||||
|
import com.jsaasta.froj.stdlib.socket.SocketServer;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -12,6 +14,7 @@ public class Stdlib {
|
||||||
classes.put("clock", new Clock());
|
classes.put("clock", new Clock());
|
||||||
classes.put("input", new Input());
|
classes.put("input", new Input());
|
||||||
classes.put("fileReader", new FileReader());
|
classes.put("fileReader", new FileReader());
|
||||||
|
classes.put("socket", new SocketServer());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Map<String, Object> define(){
|
public static Map<String, Object> define(){
|
||||||
|
|
34
src/com/jsaasta/froj/stdlib/socket/ClientHandler.java
Normal file
34
src/com/jsaasta/froj/stdlib/socket/ClientHandler.java
Normal 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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
34
src/com/jsaasta/froj/stdlib/socket/SocketClient.java
Normal file
34
src/com/jsaasta/froj/stdlib/socket/SocketClient.java
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
38
src/com/jsaasta/froj/stdlib/socket/SocketServer.java
Normal file
38
src/com/jsaasta/froj/stdlib/socket/SocketServer.java
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue