2012-04-16 56 views
0

我想測試我的程序,該程序在發件人接收器類之間發送DatagramSocket數據。我應該如何去測試這些類之間的數據發送?測試DatagramSockets的傳輸

這裏是我的發送方碼...

public class CheckIn { 

    private String patientName; 
    private String pTime; 
    private int portnumber; 

    public CheckIn(String pname, String time, int port){ 
     patientName = pname; 
     pTime = time; 
     portnumber = port; 
     process(); 
    } 

    public void process() { 
     try { 
      DatagramSocket is = new DatagramSocket(5800,InetAddress.getLocalHost()); 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      ObjectOutputStream oos = new ObjectOutputStream(baos); 
      String n = "Your "+"\n" + pTime + "\n" + patientName + " has arrived"; 
      oos.writeObject(n); 
      byte[] buffer = baos.toByteArray(); 
      baos.close(); 
      oos.close(); 
      DatagramPacket packet = new DatagramPacket(buffer, buffer.length,InetAddress.getLocalHost(), portnumber); 
      is.send(packet); 

      System.out.println("patient name " + patientName); 
      System.out.println("Check In"); 
     } 
     catch (Exception e){ 
      System.out.println("ERROR Cashier: " + e.getMessage()); 
      e.printStackTrace(); 
     } 
    } 
} 

這是我Receiver類...

class Reciever2 extends Thread { 
    public Reciever2(){ 
     this.start(); //starts the thread 
    } 

    public void run(){ 
     try { 
      DatagramSocket socket = new DatagramSocket(5700,InetAddress.getLocalHost()); 
      System.out.println("Recieving"); //prints when receiving a message 

      while (true){ 
       byte[] data = new byte[1024]; //array of bytes 
       DatagramPacket packet = new DatagramPacket(data,data.length); 
       socket.receive(packet);  //receives the packet 
       ByteArrayInputStream bais = new ByteArrayInputStream(packet.getData()); 
       ObjectInputStream ois = new ObjectInputStream(bais); 
       String s = (String) ois.readObject(); //reading the data 
       bais.close(); //closes input stream 
       ois.close(); //closes input stream 

       System.out.println(s); 
       theText.setText(s); //displays message 
      } 
     } 
     catch (Exception e){ 
      System.out.println("ERROR Cook: " + e.getMessage()); 
      } 
     } 
    } 
+0

最簡單的方法是寫一個接收器嗎? – Erik 2012-04-16 13:47:17

+0

@Erik - 是的,這就是我要做的,將代碼添加到CheckIn類中。然後用一個ctor參數替換神奇的'5800'端口號並添加一個接收端口號。然後讓它們中的兩個具有互補端口,然後將它們傳遞給幾對線程,然後在一個數據報中啓動,並在它循環時觀察。 – 2012-04-16 13:54:57

+0

嗯。只需要兩個線程 - 每個線程都會等待數據報,並在收到時再次發送出去。 – 2012-04-16 13:57:19

回答

1

你可能需要編寫測試對接收器類,或有訪問目標服務器,以便觀察更改。 UDP協議幾乎是單向協議。

本指南對了解更多關於DatagramSockets的信息可能會有幫助 - 它還有一個關於編寫發件人和接收者的章節。 http://docs.oracle.com/javase/tutorial/networking/datagrams/index.html

+0

我也有接班人 – user1236260 2012-04-16 13:52:08

+0

那麼,reciver類是不是工作?如果是這樣,只需打印包中的值就可以了。 – 2012-04-16 13:58:13

+0

那麼,啓動Receiver程序,然後啓動發件人程序 - 您應該能夠看到他們是否正在相互交談,特別是如果您正在使用像Eclipse這樣的IDE,並且可以在Receiver中設置一個調試器斷點。 – wattostudios 2012-04-16 13:59:19