Witam.
Jestem w czasie robienia projektu klient/server. Za zadanie mam w tym projekcie wcisnąć tyle wzorców ile się da. Dlatego przy komunikacji zamiast wysyłać np. obiekt, chcę zastosować GZIP i wysyłać ciąg bajtów. Niestety są problemy i nie wiem gdzie mam się ich doszukiwać.
Klasa Network
package kolemkrzyzem;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
public class Network extends Thread{
java.net.ServerSocket sock = null;
java.net.Socket clientSocket = null;
InputStream inputStream = null;
OutputStream outputStream = null;
GZIPInputStream in = null;
GZIPOutputStream out = null;
public void send(Object msg) throws IOException
{
ByteArrayOutputStream baos= new ByteArrayOutputStream();
ObjectOutputStream oos=new ObjectOutputStream(baos);
oos.writeObject(msg);
oos.flush();
baos.writeTo(out);
oos.close();
baos.close();
}
public Object read() throws IOException, InterruptedException, ClassNotFoundException
{
while (inputStream.available() == 0)
{
sleep(100);
}
byte[] ar=new byte[1000];
in.read(ar);
ByteArrayInputStream baos= new ByteArrayInputStream(ar);
ObjectInputStream cx=new ObjectInputStream(baos);
return cx.readObject();
}
}
Klasa ClientNetwork:
package kolemkrzyzem;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
public class ClientNetwork extends Network{
private String host;
private int port;
public ClientNetwork(String host1, int port1) throws IOException
{
host = host1;
port = port1;
}
void connectToServer() throws IOException
{
try
{
clientSocket = new java.net.Socket(host,port);
} catch (java.net.SocketTimeoutException ex) { }
outputStream = clientSocket.getOutputStream();
inputStream = clientSocket.getInputStream();
out = new GZIPOutputStream(outputStream);
in = new GZIPInputStream(inputStream);
}
}
Klasa ServerNetwork
package kolemkrzyzem;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
public class ServerNetwork extends Network{
private int port;
public ServerNetwork(int port) throws IOException
{
this.port = port;
}
void acceptClient() throws IOException
{
sock = new java.net.ServerSocket(port);
clientSocket = sock.accept();
outputStream = clientSocket.getOutputStream();
inputStream = clientSocket.getInputStream();
out = new GZIPOutputStream(outputStream);
in = new GZIPInputStream(inputStream);
}
}
Połączenie następuje, serwer niby bez problemu wysyła dane i działa dalej, ale klient tego nie widzi (zatrzymuje się na pętli z inputStream.available() == 0), a gdy w ogóle wywalę tą pętlę to mi zatrzymuje się na in.read(ar).
Jave znam słabo dlatego pytam czy da się zrobić klient/server za pośrednictwem GZIPa? Informuje, że bez GZIPa za pomocą samych ObjectXXXStream działa dobrze.