[Resolvido]Socket UDP erro de checksum

5 respostas
T

Olá,

tenho o seguinte código, que simplesmente envia um pacote udp para o endereço escohlido e espera a resposta

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class TestCehcksum {

	public static void main(String[] args) {

		try {
			DatagramSocket socket = null;

			socket = new DatagramSocket();
			socket.setSoTimeout(1000);
			byte[] buf = new byte[80];
			buf[0] = (byte) 0xa8;
			buf[1] = 0x03;
			InetAddress address = InetAddress.getByAddress(new byte[] { (byte) 192, (byte) 168, 0, (byte) 148 });
			DatagramPacket packet = new DatagramPacket(buf, 80, address, 1000);
			DatagramPacket receber = null;
			socket.send(packet);
			byte[] vaiSerRecebido = new byte[80];
			receber = new DatagramPacket(vaiSerRecebido, vaiSerRecebido.length);
			socket.receive(receber);
			socket.close();
			
		} catch (SocketException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

esse código funciona corretamente no windows xp e no ubuntu, mas no windows 7 não estava chegando a resposta. Utilizei o Wireshark para analisar os pacotes enviados, e percebi que no windows 7 o checksum do protolo IP está saindo sempre 0x0000, e o próprio wireshark aponta o erro no checksum. Alguém tem alguma idéia do que pode estar acontecendo?

grato.

5 Respostas

D

Bom, estou “Chutando”.

Mas não pode ser algo relacionado a FIREWALL, BLOQUEIO, ETC ??

O VISTA, 7 tem algumas novidades com relação a isso neh! Das Veis !!

T

Já desbloqueei tudo que eu vi no windows 7, mas não resolveu o problema.

O pacote sai da máquina e chega no seu destino, mas não é respondido por causa do erro de checksum.

ViniGodoy

Que eu saiba, a validação de checksum no UDP é opcional. O problema não deve ser esse.

T

Sim, a validação do checksum é opcional no UDP. Mas estou me comunicando com um equipamento que requer um checksum válido, caso contrário ele não responde. A questão é porque apenas no windows 7 que o pacote sai sem o checksum?

A api do Java é bem alto nível nessa parte e não temos acesso a coisas como o checksum, ela cuida disso pra nós.

T

problema resolvido, nas configurações da placa de rede estava habilitada a opção UDP Checksum Offload, só desabilitá-la que funcionou

Criado 7 de julho de 2010
Ultima resposta 8 de jul. de 2010
Respostas 5
Participantes 3