Bom pessoal eu já fiz um post aqui sobre enviar vários byte[], e isso eu já consegui, mas estou com problema na hora que eu recebo esses dados, pois estou enviando com os devidos cabeçalhos, numero do ACK, tamanho dos dados checksum e etc.
segue minha classe server e client:
Ahh, tem mais uma coisa, como eu faço um pacote ser re-enviado caso não feche o checksum?
public class Server {
public void startSever(){
try {
DatagramSocket dataRec = new DatagramSocket(7777);
Conversor conversor = null;
byte[] dadosRecebidos = new byte[100];
byte[] nroAck = new byte[2];
byte[] tamanhoBy = new byte[2];
byte[] nroSeqBy = new byte[2];
byte[] checksum = new byte[8];
while(true){
DatagramPacket dp = new DatagramPacket(dadosRecebidos, dadosRecebidos.length);
dataRec.receive(dp);
byte[] pacote = dp.getData();
System.out.println(new String(pacote));
for(int i = 0; i < 2;i++){
nroSeqBy[i] = pacote[i];
}
int k = 2;
for(int i = 0; i < 2; i++){
nroAck[i] = pacote[k];
k++;
}
for(int i = 0; i < 2; i++){
tamanhoBy[i] = pacote[k];
k++;
}
for(int i = 0; i < 51; i++){
dadosRecebidos[i] = pacote[k];
k++;
}
for(int i = 0; i < 8; i++){
checksum[i] = pacote[k];
k++;
}
conversor = new Conversor();
conversor.getCrc().update(dadosRecebidos);
// comparar CRC da parte dos dados com o crc que veio no modelo!
if(conversor.getLong(checksum, 0, checksum.length) != conversor.getCrc().getValue()){
// mexer no Ack
// Fazer o treco para re-enviar o pacote
}
// Ver como verificar quando o arquivo foi enviado por completo
// System.out.println(new String(dadosRecebidos));
}
}
catch (SocketException ex) {
ex.printStackTrace();
}
catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
CLIENT
public class Client {
private Conversor converter = new Conversor("C:\Users\Guilherme\Desktop\arqTeste.txt");
public void enviarDados(){
try {
byte[] dados = converter.converteFileToByteArray();
DatagramSocket dataSend = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("localhost");
DatagramPacket sendPacket = null;
List<byte[]> enviar = null;
int i = 0;
do{
enviar = converter.montaCabecalhos(converter.montaArray50Bytes(dados));
sendPacket = new DatagramPacket(enviar.get(i), enviar.get(i).length, IPAddress, 7777);
dataSend.send(sendPacket);
i++;
}
while(i < enviar.size());
dataSend.close();
}
catch (SocketException ex) {
ex.printStackTrace();
}
catch (UnknownHostException ex) {
ex.printStackTrace();
}
catch (IOException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
}
}