multithread server with futureTask
i want to write a multithread server that prints the message received from a client in reverse order i have problems with getting the message from a client and passing that to futureTask
this is my futureTaskCallback
class FutureTaskCallback<V> extends FutureTask<V> {
public FutureTaskCallback(Callable<V> callable) {
super(callable);
}
public void done() {
String result = "Wynik: ";
if (isCancelled()) result += "Cancelled.";
else try {
result += get();
} catch(Exception exc) {
result += exc.toString();
}
JOptionPane.showMessageDialog(null, result);
}
}
and mycallable
public class MyCallable implements Callable
{
String toReverse;
public MyCallable(String s){toReverse=s;}
public String call () throws java.io.IOException, InterruptedException {
StringBuffer out = new StringBuffer();
////ClientWorker w;
/// w = new ClientWorker(server.accept(), textField);
/// Thread t = new Thread(w);
//// t.start();
//////toReverse=textField.getText();
///System.out.println(toReverse);
if (toReverse == null || toReverse.trim().equals(""))
throw new IllegalArgumentException("Set string to reverse");
///if (t.isInterrupted()) return null;
char[] org = toReverse.toCharArray();
//// if (t.isInterrupted()) return null;
for (int i = org.length-1; i>=0; i--) {
Thread.sleep(500);
out.append(org);
////if (t.isInterrupted()) return null;
///textField.setText(out.toString());
////if (t.isInterrupted()) return null;
}
///////Thread t = Thread.currentThread();
return out.toString();
}
i want to pass the message received from a client to mycallable then to server so it can print the output
how to do that ?
thank you
regards
[1956 byte] By [
oll3ia] at [2007-11-27 2:45:18]

# 1
Here's a primitive example:
import java.net.*;
import java.util.concurrent.*;
import java.io.*;
import javax.swing.*;
public class RevServer{
ServerSocket ss;
boolean go;
public RevServer(int port){
try{
ss = new ServerSocket(port);
}
catch (Exception e){
e.printStackTrace();
}
go = true;
}
public void runServer(){
try{
while (go){
Socket s = ss.accept();
System.out.println("...client connected");
service(s);
}
ss.close();
}
catch (Exception e){
e.printStackTrace();
}
}
void service(Socket s){
Thread t = new Thread(new ClientHandler(s));
t.start();
}
public static void main(String[] args){
RevServer rs = new RevServer(9999);
rs.runServer();
}
}
class ClientHandler implements Runnable{
Socket sct;
public ClientHandler(Socket s){
sct = s;
}
public void run(){
try{
BufferedReader br
= new BufferedReader(new InputStreamReader(sct.getInputStream()));
String msg = br.readLine();
FutureTaskCallback<String> ftc
= new FutureTaskCallback<String>(new MyCallable(msg));
new Thread(ftc).start();
PrintWriter pw = new PrintWriter(sct.getOutputStream(), true);
pw.println(ftc.get());
sct.close();
}
catch (Exception e){
e.printStackTrace();
}
}
}
class FutureTaskCallback<V> extends FutureTask<V> {
public FutureTaskCallback(Callable<V> callable) {
super(callable);
}
public void done() {
String result = "Wynik: ";
if (isCancelled()){
result += "Cancelled.";
}
else{
try {
result += get();
}
catch(Exception exc) {
result += exc.toString();
}
}
JOptionPane.showMessageDialog(null, result);
}
}
class MyCallable implements Callable<String>{
String toReverse;
public MyCallable(String s){
toReverse = s;
}
public String call() throws java.io.IOException, InterruptedException {
StringBuffer out = new StringBuffer();
if (toReverse == null || toReverse.trim().equals("")){
throw new IllegalArgumentException("Set string to reverse");
}
char[] org = toReverse.toCharArray();
for (int i = org.length - 1; i >= 0; i--) {
Thread.sleep(500);
out.append(org[i]);
}
return out.toString();
}
}
-
import java.net.*;
import java.io.*;
public class RevClient{
public static void main(String[] args) throws Exception{
String str, rstr;
str = "All you need is love";
if (args.length > 0){
str = args[0];
}
Socket sc = new Socket("127.0.0.1", 9999);
PrintWriter pw = new PrintWriter(sc.getOutputStream(), true);
BufferedReader br
= new BufferedReader(new InputStreamReader(sc.getInputStream()));
pw.println(str);
System.out.println("...wait a moment");
rstr = br.readLine();
System.out.println(rstr);
sc.close();
}
}
hiwaa at 2007-7-12 3:12:43 >
