Skip to content

Instantly share code, notes, and snippets.

@Kilobyte22
Last active December 18, 2015 04:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Kilobyte22/5729871 to your computer and use it in GitHub Desktop.
Save Kilobyte22/5729871 to your computer and use it in GitHub Desktop.
/*
Note that i am quite a groovy noob (this is pretty much my first project). So don't be harsh with me :) tell me what i can improve instead
*/
class Server {
private ServerSocket server;
String tarip;
int tarport;
def Server(int port, String tarip, int tarport) {
server = new ServerSocket(port);
this.tarip = tarip;
this.tarport = tarport;
}
def listen() {
Thread.start {
while (true) {
Client c = new Client(server.accept(), this);
}
}
}
}
class Client {
private final Socket socket;
private Client oppositeSide;
private BufferedReader reader;
private BufferedWriter writer;
private final Server server;
private final isServerConnection;
def Client(Socket socket, Server server) {
this.server = server
this.socket = socket
oppositeSide = new Client(this, server);
isServerConnection = true;
initStreams();
}
def Client(Client opposite, Server server) {
oppositeSide = opposite;
this.server = server;
socket = new Socket(server.tarip, server.tarport);
isServerConnection = false;
initStreams();
}
private def initStreams() {
this.reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
this.writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
Thread.start(listenthread);
}
def listenthread = {
String line = "";
while (true) {
line = reader.readLine();
if (line == null) return;
if (oppositeSide != null) {
oppositeSide.writer.write(line + "\n");
println (( isServerConnection ? "[SERVER] -> [CLIENT]" : "[CLIENT] -> [SERVER]") + " " + line);
oppositeSide.writer.flush();
}
}
}
}
def static main(String[] args_) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
def read = { br.readLine(); }
def List<String> args = [];
//if (args_.size() < 3) {
print("Listen port: ")
args[0] = read();
print("Target Host: ")
args[1] = read();
print("Target port: ")
args[2] = read();
/*} else {
args[0] = args_[0];
args[1] = args_[1];
args[2] = args_[2];
}*/
new Server(Integer.parseInt(args[0]), args[1], Integer.parseInt(args[2])).listen();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment