Pessoal, o senário é o seguinte, estou desenvolvendo um jogo de palavras cruzadas entre dois jogadores(projeto da faculdade), a lógica do jogo está pronta, o problema está no envio do xml via socket, dei uma olhada no artigo daqui e em alguns posts, mas nada, ao meu ver, era parecido com a minha situação.
Assim que eu clicar, durante o jogo, no botão confirmar da tela principal eu mudo o atributo turno do jogador da vez pra false, o do outro pra true, incremento sua pontuação(ou não no caso de erro) e envio o xml via socket para a maquina do jogador adversário informando o que aconteceu e atualizando o que precisar. Quando é para o cliente enviar e o servidor receber o xml vai tudo direitinho, o problema é que não estou sabendo como enviar do servidor para o cliente (OBS: não coloquei o servidor em loop, ou seja, vou usar o método accept() a cada vez que clicar no botão confirmar da tela principal, o que preciso saber realmente é como enviar o xml do servidor para o cliente).
Da uma força ai ;D
Classes
Servidor:
package socket;
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
import javax.swing.JOptionPane;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import PalavrasCruzadas.Jogo;
public class Servidor {
private ServerSocket servidor = null;
private Socket socket = null;
private Jogo J = new Jogo();
public Jogo ServidorReceberXml(){
String xml = new String();
try{
servidor = new ServerSocket(7000);
socket = servidor.accept();
Scanner entradaXml = new Scanner(socket.getInputStream());
while (entradaXml.hasNextLine()) {
xml = xml + entradaXml.nextLine();
}
XStream tornarObjeto = new XStream(new DomDriver());
J = (Jogo)tornarObjeto.fromXML(xml);
return J;
}catch(IOException e){
JOptionPane.showMessageDialog(null, "Erro no Servidor!");
return null;
}finally{
try{
servidor.close();
socket.close();
}catch(IOException e){}
}
}
public void ServidorEnviarXml(String xml){
try{
servidor = new ServerSocket(7000);
socket = servidor.accept();
PrintStream ps = new PrintStream(socket.getOutputStream());
ps.println(xml);
}catch(IOException e){
JOptionPane.showMessageDialog(null,"Ocorreu um erro no servidor!");
}finally{
try{
socket.close();
servidor.close();
}catch(IOException e){
}
}
}
public Jogo getJogo(){
return J;
}
public void setJogo(Jogo J){
this.J = J;
}
}
Cliente:
package socket;
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import PalavrasCruzadas.Jogo;
public class Cliente {
Socket socket = null;
Jogo J = new Jogo();
String ip = null;
public void ClienteEnviarXml(String ip, String xml){
this.ip = ip;
PrintStream ps = null;
try{
socket = new Socket(ip,7000);
ps = new PrintStream(socket.getOutputStream());
ps.println(xml);
}catch(IOException e){
System.out.println("Algum problema ocorreu ao criar ou enviar dados pelo socket.");
}finally{
try{
socket.close();
}catch(IOException e){}
}
}
public Jogo clienteReceberXml(){
String xml = new String();
try{
socket = new Socket(ip,7000);
Scanner entradaXml = new Scanner(socket.getInputStream());
while (entradaXml.hasNextLine()) {
xml = xml + entradaXml.nextLine();
}
XStream tornarObjeto = new XStream(new DomDriver());
J = (Jogo)tornarObjeto.fromXML(xml);
return J;
}catch(IOException e){
System.out.println("Algum problema ocorreu ao criar ou enviar dados pelo socket.");
return null;
}
}
public Jogo getJogo(){
return J;
}
public void setJogo(Jogo J){
this.J = J;
}
}