19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
20 * or visit www.oracle.com if you need additional information or have any |
20 * or visit www.oracle.com if you need additional information or have any |
21 * questions. |
21 * questions. |
22 */ |
22 */ |
23 |
23 |
24 /** |
24 /* |
25 * @test |
25 * @test |
26 * |
|
27 * @bug 4424096 |
26 * @bug 4424096 |
28 * |
|
29 * @summary DatagramPacket spec needs clarification (reuse buf) |
27 * @summary DatagramPacket spec needs clarification (reuse buf) |
|
28 * @run main ReuseBuf |
|
29 * @run main/othervm -Djava.net.preferIPv4Stack=true ReuseBuf |
|
30 * @run main/othervm -Djdk.net.usePlainDatagramSocketImpl=true ReuseBuf |
30 */ |
31 */ |
31 import java.net.*; |
32 import java.net.*; |
|
33 import static java.lang.System.out; |
32 |
34 |
33 public class ReuseBuf { |
35 public class ReuseBuf { |
34 static String msgs[] = {"Hello World", "Java", "Good Bye"}; |
36 static String msgs[] = {"Hello World", "Java", "Good Bye"}; |
35 static int port; |
37 static int port; |
36 |
38 |
52 DatagramPacket dp = new DatagramPacket(b,b.length); |
54 DatagramPacket dp = new DatagramPacket(b,b.length); |
53 while (true) { |
55 while (true) { |
54 try { |
56 try { |
55 ds.receive(dp); |
57 ds.receive(dp); |
56 String reply = new String(dp.getData(), dp.getOffset(), dp.getLength()); |
58 String reply = new String(dp.getData(), dp.getOffset(), dp.getLength()); |
57 ds.send(new DatagramPacket(reply.getBytes(),reply.length(), |
59 out.println("server: received [" + reply + "]"); |
58 dp.getAddress(),dp.getPort())); |
60 for (int i=0; i<2; i++) { |
|
61 out.println("server: sending [" + reply + "]"); |
|
62 ds.send(new DatagramPacket(reply.getBytes(), reply.length(), |
|
63 dp.getAddress(), dp.getPort())); |
|
64 } |
59 if (reply.equals(msgs[msgs.length-1])) { |
65 if (reply.equals(msgs[msgs.length-1])) { |
60 break; |
66 break; |
61 } |
67 } |
62 } catch (Exception e) { |
68 } catch (Exception e) { |
63 throw new RuntimeException(e.getMessage()); |
69 throw new RuntimeException(e.getMessage()); |
74 InetSocketAddress bindaddr = new InetSocketAddress(local, 0); |
80 InetSocketAddress bindaddr = new InetSocketAddress(local, 0); |
75 DatagramSocket ds = new DatagramSocket(bindaddr); |
81 DatagramSocket ds = new DatagramSocket(bindaddr); |
76 byte b[] = new byte[100]; |
82 byte b[] = new byte[100]; |
77 DatagramPacket dp = new DatagramPacket(b,b.length); |
83 DatagramPacket dp = new DatagramPacket(b,b.length); |
78 for (int i = 0; i < msgs.length; i++) { |
84 for (int i = 0; i < msgs.length; i++) { |
|
85 out.println("client: sending [" + msgs[i] + "]"); |
79 ds.send(new DatagramPacket(msgs[i].getBytes(),msgs[i].length(), |
86 ds.send(new DatagramPacket(msgs[i].getBytes(),msgs[i].length(), |
80 InetAddress.getLocalHost(), |
87 InetAddress.getLocalHost(), |
81 port)); |
88 port)); |
82 ds.receive(dp); |
89 ds.receive(dp); |
83 if (!msgs[i].equals(new String(dp.getData(), dp.getOffset(), dp.getLength()))) { |
90 String recvmsg = new String(dp.getData(), dp.getOffset(), dp.getLength()); |
84 throw new RuntimeException("Msg expected: "+msgs[i] +msgs[i].length()+ |
91 out.println("client: received [" + recvmsg + "]"); |
85 "msg received: "+new String(dp.getData(), dp.getOffset(), dp.getLength())+dp.getLength()); |
92 if (!msgs[i].equals(recvmsg)) { |
|
93 throw new RuntimeException("Msg expected: " + msgs[i] + |
|
94 ", msg received: " + recvmsg); |
|
95 } |
|
96 |
|
97 byte ba[] = new byte[1]; |
|
98 DatagramPacket dp2 = new DatagramPacket(ba, ba.length); |
|
99 dp2.setData(new byte[99], 5, 3); // only 3 bytes |
|
100 ds.receive(dp2); |
|
101 String expectedMsg = msgs[i].substring(0, 3); |
|
102 recvmsg = new String(dp2.getData(), dp2.getOffset(), dp2.getLength()); |
|
103 out.println("client: received [" + recvmsg + "]"); |
|
104 if (!expectedMsg.equals(recvmsg)) { |
|
105 throw new RuntimeException("Msg truncated expected: " + expectedMsg + |
|
106 ", msg received: "+ recvmsg); |
86 } |
107 } |
87 } |
108 } |
88 ds.close(); |
109 ds.close(); |
89 System.out.println("Test Passed!!!"); |
110 out.println("Test Passed!!!"); |
|
111 st.join(); |
90 } |
112 } |
91 } |
113 } |