Fala galera,
Sou novo aqui e novo no mundo java.
Sou programador AS3, RoR e Python e agora estou me aventurando no mundo Java para realizar um projeto pessoal.
A muito tempo atrás fiz um socket em Python com conexão persistente e agora queria fazer em java.
Segui vários tutoriais, inclusive a maioria dos tópicos aqui do fórum, por isso venho perguntar a vocês.
O último que segui foi esse:
http://www.javareference.com/jrexamples/viewexample.jsp?id=47
Meu cliente é um Flash AS3 e meu socket Server é em JAVA.
O cliente conecta, segura a conexão, manda a mensagem e fico esperando a mensagem no Java, mas ela não aparece.
Quando eu desconecto o flash a mensagem aparece.
Se eu envio várias mensagens do Flash para o Java, nada acontece até eu fechar o flash, quando eu fecho o flash todas as mensagens aparecem.
O que pode ser?
Lembro que quando fiz Flash + Python, eu tinha que mandar um byte zero no fim da string incluindo \0 no final da string.
Mas no Java não tá rolando.
Segue o código:
Classe do Server
public class Server extends Thread {
static ServerSocket myServer;
ArrayList clients = new ArrayList<ClientWorker>();
Server(){
}
public void run() {
try{
myServer = new ServerSocket(4321);
}catch(IOException e){
System.out.println(e);
}
System.out.println(clients.size());
while(true){
ClientWorker w;
try{
//server.accept returns a client connection
w = new ClientWorker(myServer.accept(), this);
w.start();
clients.add(w);
System.out.println(clients.size());
} catch (IOException e) {
System.out.println("Accept failed: 4444");
System.exit(-1);
}
}
}
public void killClient(ClientWorker _client){
clients.remove(_client);
_client = null;
System.out.println(clients.size());
}
}
Classe da Thread
public class ClientWorker extends Thread {
private Socket client;
private Server server;
private BufferedReader in = null;
private PrintWriter out = null;
ClientWorker(Socket client, Server server) {
this.client = client;
this.server = server;
}
public void run() {
try{
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream(), true);
String line = in.readLine();
boolean onready = true;
while (onready) {
if(line != null){
System.out.println("fala:" + line);
line = in.readLine();
}else{
in.close();
out.close();
client.close();
server.killClient(this);
System.out.println("mata");
onready = false;
try {
this.finalize();
} catch (Throwable ex) {
Logger.getLogger(ClientWorker.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
} catch (IOException e) {
System.out.println("in or out failed");
System.exit(-1);
}
}
