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;
|
||||
|
||||
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(){
|
||||
|
|
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