2014-02-14 45 views
1

这是其在同一台PC,我试图发送一个UDP包,上运行的Android设备模拟器中运行(这是错误?)UDP数据包NPE - Java的

发送代码:

private byte[] buf = new byte[1]; 

private DatagramPacket p; 

private int port = 4442; 
private InetAddress ip; 
private DatagramSocket s; 
try { 
     ip = InetAddress.getByName(Dataholder.ip);//This one is holding the IP , it is confirmed that it is stored 
    } catch (UnknownHostException e) {} 

    try { 
     s = new DatagramSocket(port , ip); 
    } catch (SocketException e) {} 
private void sendPacket(int num){////NUM IS 1 DIGIT ONLY! 
    buf = Integer.toString(num).getBytes(); 
    p = new DatagramPacket(buf , buf.length, ip,port); 
    try { 
     s.send(p);//Null pointer this line 
    } catch (IOException e) {} 
} 

和接收代码:

byte[] data = new byte[1]; 

    s = new DatagramSocket(4442); 
    p = new DatagramPacket(data, data.length); 
while(true){ 

    s.receive(p); 
    } 

我实际使用PC的IPv4地址...

+0

错误究竟发生在哪里? – Smutje

+0

它的评论.... s.send(p); – user3310358

回答

0

大多数LIK你的DatagramSocket没有正确实例化。它可能会抛出一个像冠军一样吞咽的异常。

不要吞下那样的例外。例外情况告诉你有用的东西。如果你在该catch块中放置了一个简单的System.out.println,你可能会看到new DatagramSocket正在引发某种异常。

+0

新的DatagramSocket不会抛出异常,我找不到为什么s.send(p);导致虚拟机崩溃 – user3310358

+0

你说你得到一个NPE。如果是这样的话,'s'很可能是空的。如果不是,请查看堆栈跟踪以查看异常源自的位置。也许你的数据包是空的。我不知道。 – SirBraneDamuj