Socket overføre ArrayList
Jeg har følgende kode der godt kan compile uden fejl. Meningen er at klienten kalder serveren med et projektnavn. Serveren kalder så en andenklasse med parameteren projektnavn og der returneres en ArrayList indeholdende Strings. Arraylisten skal så via ObjectOutputStream/ObjectInputStream sendes fra Serveren over til klienten der så udskriver alle Strengene.Der er indsat nogle System.outPrintln for at finde ud af hvor langt programmet når. Programmet stopper hænger efter både klienten og Serveren har udskrevet "1".
Hvad er der galt?
Koden:
import java.io.*;
import java.net.*;
import java.util.*;
public class Client
{
public static void main (String[]args)
{
try
{
ArrayList list;
Socket s = new Socket("127.0.0.1", 1234);
//BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter out = new PrintWriter(s.getOutputStream(), true);
out.println("Projekt1");
System.out.println("1");
ObjectInputStream input = new ObjectInputStream(s.getInputStream());
System.out.println("2");
list = (ArrayList)input.readObject();
for(int i = 0; i < list.size(); i++)
{
System.out.println((String)list.get(i));
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
import java.io.*;
import java.net.*;
import cs1.Keyboard;
public class Server
{
public static void main (String[]args)
{
try
{
ServerSocket s = new ServerSocket(1234);
IncomingThread t = new IncomingThread(s);
t.start();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
import java.io.*;
import java.util.*;
import java.net.*;
class IncomingThread extends Thread
{
ServerSocket s;
FileHandler f;
ArrayList list;
public IncomingThread(ServerSocket servSock)
{
s = servSock;
f = new FileHandler();
list = new ArrayList();
}
public void run()
{
try
{
System.out.println("server up and running...");
Socket incoming = s.accept();
BufferedReader in = new BufferedReader(new InputStreamReader (incoming.getInputStream()));
String projektnavn = in.readLine();
list = f.listFiles(projektnavn);//returnere en ArrayList med Strings
System.out.println("1");
Socket soc = s.accept();
System.out.println("2");
ObjectOutputStream outObject = new ObjectOutputStream(soc.getOutputStream());
outObject.writeObject(list);
soc.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
