ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/experimental/server/XMLReader/UDPReader.java
Revision: 1.4
Committed: Fri Nov 17 20:44:31 2000 UTC (23 years, 5 months ago) by pjm2
Branch: MAIN
Changes since 1.3: +6 -3 lines
Log Message:
UDPReader and UDPReaderThread have been altered to prevent
a serious problem whereby the system ran out of free memory
after a certain amount of UDP packets had been received.

Testing with XMLSender2 has revealed that this problem has
been solved.  There is now little chance of the UDPReader
rejecting packets as it queues each arrival straight to the
UDPReaderThread, thus making "event storms" managable.  In
fact, the queuing nature may even assist in quenching such
problems.

File Contents

# Content
1 import java.io.*;
2 import java.net.*;
3 import java.util.*;
4
5 // This class contains the main method to be run by
6 // the filter children. It harvests UDP traffic
7 //
8 //
9 public class UDPReader {
10
11 public static void main(String[] args) throws IOException {
12
13 // default UDP listening port.
14 int port = 4589;
15 final int packetSizeLimit = 8192;
16
17 // Allow the user to choose their own port number.
18 if (args.length == 1){
19 try {
20 port = new Integer(args[0]).intValue();
21 }
22 catch (Exception e){
23 // If something went wrong, use the default again.
24 port = 4589;
25 }
26 }
27
28 DatagramSocket socket = null;
29 try {
30 socket = new DatagramSocket(port);
31 }
32 catch (BindException e){
33 System.out.println("Some other process is already listening on port "+port+".");
34 System.out.println("Please specify another port number on the command line.");
35 System.exit(0);
36 }
37
38 System.out.println("UDPReader ready and listening for UDP packets on port "+port);
39
40 byte[] buf;
41 UDPReaderThread t = new UDPReaderThread();
42
43 boolean running = true;
44 while (running){
45 System.gc();
46 try {
47 buf = new byte[packetSizeLimit];
48 // receive request
49 DatagramPacket packet = new DatagramPacket(buf, buf.length);
50 socket.receive(packet);
51 t.run(packet);
52 }
53 catch (IOException e) {
54 System.out.println("An exception occured in the UDPReader!");
55 e.printStackTrace();
56 }
57 }
58 socket.close();
59 }
60 }