2010-11-03 85 views
0

想要将这个代码实现为类中的一个,而不是主类,它将需要尝试并捕获IOException,我该如何放置它?UDP代码需要重写

当调用sendUPD(valueData);时,它会向该函数发送字符串。

private boolean Notconnected = true; 

private void sendUDP(String s){ 
if(Notconnected){ 
    DatagramSocket datgramSocket = new DatagramSocket(4455); //<--- try catch 
    Notconnected = false; 
    } 
    try { 

    byte[] buf = new byte[512]; 

     DatagramPacket incomingPacket = new DatagramPacket(buf, buf.length); 
     datgramSocket.receive(incomingPacket); 

     //What did we just receive? 
     //String s = new String(incomingPacket.getData(),0,incomingPacket.getLength()); 

     if(!(s.equals("quit"))){ 
     String responseString = s; 
    buf = responseString.getBytes("UTF-8"); 

     InetAddress address = incomingPacket.getAddress(); 
     int port = incomingPacket.getPort(); 

     DatagramPacket outgoingPacket = new DatagramPacket(buf, buf.length, address, port); 

     datgramSocket.send(outgoingPacket); 
    } 
    } catch (IOException e) { } 
} 

回答

0

对于在现有的try块中捕获到的IOException,你没有做任何事情。打开插座时你会做不同的事情吗?

我注意到,如果你不能打开套接字,你仍然尝试接收和发送数据。这是如何运作的?

看起来你只是想让它编译。在这种情况下,您可以在现有的尝试中移动该if(Notconnected)块。如果套接字无法打开,那么还有另外一个优点,就是不会尝试接收/发送数据,因为Exception会跳转到底部的catch块。

还有相当多的工作要做到恰到好处。祝你好运。

0

你的代码结构不好。您应该在该类的构造函数中创建DatagramSocket,而不是在需要时创建它,并让构造函数在失败时抛出IOException。那么你永远不会有这个问题。