Gente tenho que fazer uma espécie de FTP para um trabalho da faculdade usando a classe DatagramSocket.
Então tenho a minha classe cliente que envia os dados e uma servidor que recebe (clássico), o envia parece estar funcionando ok, mas o recebe está travando e rodando infinitamente, pls, podem dar uma olhada no código?
Classe Client -
[code]public class Client {
private Conversor converter= new Conversor();
public void enviarDados(byte[] dados){
try {
DatagramSocket dataSend = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("localhost");
DatagramPacket sendPacket = null;
int i;
List<byte[]> bytes = converter.montaArray50Bytes(dados);
for(i = 0; i < bytes.size(); i++){
sendPacket = new DatagramPacket(bytes.get(i), bytes.get(i).length, IPAddress, 7777);
dataSend.send(sendPacket);
}
}
catch (SocketException ex) {
ex.printStackTrace();
}
catch (UnknownHostException ex) {
ex.printStackTrace();
}
catch (IOException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
}
}[/code]
Server
[code]
public class Server {
private JanelaSaida js = new JanelaSaida();
public void startSever(){
try {
DatagramSocket dataRec = new DatagramSocket(7777);
System.out.println("USE OS DADOS!");
byte[] dadosRecebidos = new byte[1024];
System.out.println("USE DADO");
while(true){
DatagramPacket dp = new DatagramPacket(dadosRecebidos, dadosRecebidos.length);
System.out.println("USE ");
dataRec.receive(dp);
System.out.println("DADOS");
byte[] bytes = dp.getData();
System.out.println("USE OS DADOS");
/*ImageIcon ic = new ImageIcon(bytes);
js.setVisible(true);
js.getLblImg().setIcon(ic);*/
}
}
catch (SocketException ex) {
ex.printStackTrace();
}
catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
}
}[/code]
metodos usados da classe Conversor:
/**
* Algoritmo recebe array de bytes e retorna uma lista com vários array de bytes com tamanho 50 cada array
* @param array de bytes
* @return uma lista com vários array de bytes com tamanho 50 cada array
*/
public List<byte[]> montaArray50Bytes(byte[] b){
List<byte[]> bytesLs = new ArrayList<byte[]>();
if(b.length <= 50){
bytesLs.add(b);
}
else{
int length = b.length;
byte[] baux = new byte[50];
int j = 0;
for(int i = 0; i >= length; i++){
baux[i] = b[j];
j++;
if(i == 50){
i = 0;
length -= 50;
}
if(length < 50 && length > 0){
byte[] bauxi = new byte[length];
int k;
for(k = 0; k < length; k++){
bauxi[k] = b[j];
j++;
bytesLs.add(bauxi);
}
length -= k;
}
bytesLs.add(baux);
}
}
return bytesLs;
}
/**
*
* @return byte[] com dados sobre arquivo
* @throws FileNotFoundException
* @throws IOException
*/
public byte[] converteFileToByteArray() throws FileNotFoundException, IOException{
File f = new File(caminho);
FileInputStream fs = new FileInputStream(f);
byte[] byt = new byte[(int)f.length()];
for(int i = 0;i < f.length();i++){
byt[i] = (byte) fs.read();
}
fs.close();
System.out.println("Conversão ok");
return byt;
}
Bom, vou dormir, agradeço a ajuda de todos!
Boa noite