/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package protocol;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author julio
*/
public class ConnectionSocket {
private Socket socket;
private ObjectInputStream input_stream;
private ObjectOutputStream output_stream;
public ConnectionSocket(String ip, int port) throws UnknownHostException, IOException {
socket = new Socket(ip, port);
openStreams();
}
public ConnectionSocket(Socket socket) throws UnknownHostException, IOException {
this.socket = socket;
openStreams();
}
public void sendMessage(Message msg) throws IOException {
output_stream.writeObject(msg);
output_stream.flush();
}
public void sendMngMessage(String username, int code, Object data) {
ManagmentMessage mnMsg = new ManagmentMessage(username, code, data);
try {
sendMessage(mnMsg);
} catch (IOException ex) {
Logger.getLogger(ConnectionSocket.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void sendMngMessage(String username, int code) {
sendMngMessage(username, code, null);
}
public void close() throws IOException {
output_stream.close();
input_stream.close();
socket.close();
}
public Object readMessage() throws IOException, ClassNotFoundException {
return input_stream.readObject();
}
private void openStreams() {
try {
this.output_stream = new ObjectOutputStream(socket.getOutputStream());
this.input_stream = new ObjectInputStream(socket.getInputStream());
} catch (IOException ex) {
Logger.getLogger(ConnectionSocket.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Não é um assunto exclusivamente sobre Android, mas quem sabe vocês podem me ajudar neh?
Estava tentando compactar objetos serializados em um stream de socket, mas não estou conseguindo..
Na internet eu achei gente conseguindo enviar texto usando o GZIP, mas eu queria enviar objetos serializados compactados..e não estou conseguindo..
tipo..assim funciona (mas sem compactação):
private void openStreams() {
try {
this.output_stream = new ObjectOutputStream(socket.getOutputStream());
this.input_stream = new ObjectInputStream(socket.getInputStream());
} catch (IOException ex) {
Logger.getLogger(ConnectionSocket.class.getName()).log(Level.SEVERE, null, ex);
}
public void sendMessage(Message msg) throws IOException {
output_stream.writeObject(msg);
output_stream.flush();
}
tentei com o Gzip e o ZIP...
):
private void openStreams() {
try {
this.output_stream = new ObjectOutputStream( new GZIPInputStream(socket.getOutputStream()));
this.input_stream = new ObjectInputStream( new GZIPOutPutStream(socket.getInputStream()));
} catch (IOException ex) {
Logger.getLogger(ConnectionSocket.class.getName()).log(Level.SEVERE, null, ex);
}
mas não está funcionando (o aplicativo trava..acho que o gzip não termina a compactação do fluxo e nunca realmente envia alguma coisa pela rede), se alguém tiver alguma dica de como enviar objetos compactados em um socket..por favor, help.
A classe completa está em anexo..
Eu estava pensando em talvez utilizar alguma anotação para converter os objetos em XML e ver se como texto eu consigo enviar os objetos..alguma dica?
Desde já, muito obrigado!
--
Bacharel em Ciência da Computação pela UFV
Mestrando em Ciência da Computação pela UFABC






0 comentários:
Postar um comentário