Следвам си простичък UDP tutorial,но нещо влизам в грешка:
http://www.javatpoint.com/DatagramSocket-and-DatagramPacket - tutorial-а
//DSender.java
import java.net.*;
public class DSender{
public static void main(String[] args) throws Exception {
try{
DatagramSocket ds = new DatagramSocket();
String str = "Welcome java";
InetAddress ip = InetAddress.getByName("127.0.0.1");
DatagramPacket dp = new DatagramPacket(str.getBytes(), str.length(), ip, 3000);
ds.send(dp);
System.out.println(ds.isConnected());
} catch(Exception e){
} finally {
ds.close();
}
}
}
//DReceiver.java
import java.net.*;
public class DReceiver{
public static void main(String[] args) throws Exception {
try{
DatagramSocket ds = new DatagramSocket(3000);
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, 1024);
ds.receive(dp);
String str = new String(dp.getData(), 0, dp.getLength());
System.out.println(str);
} catch(Exception e){
} finally {
ds.close();
}
}
}
Преди да затворя сокета, правя:
ds.send(dp);
System.out.println(ds.isConnected());
ds.close();
на връзката, но винаги ми връща false, въпреки че със сигурност е свързан, и ми праща съобщение от client-а към сървъра. В JAVA 7 АPI-то пише:
Ако сокета е свързан преди да бъде затворен, тогава този метод ще продължи да ти връща true след като затвориш сокета.
Понеже call-нах isConnected() метода преди да е затворен, трябва да връща true. Използвал съм и getPort() метода, който винаги ми връща “-1“, което също показва,че не е свързано,въпреки че е.
Ако сокета е свързан преди да бъде затворен, тогава този метод ще връща порта на свързване дори и след като бъде затворен.
Какво става?