DatagramSocket! I am getting IllegalArgumentException but can't figure out why.

A

aamircheema

Dear All,

I am new to Socket Programming. I am trying to send data using UDP but
I get the IllegalArgument Exception but I can't find why I am getting
this exception.
The program below is implemented on server.Which recieves the packet
from the Client and then reads its port number and address and sends
the DATE back to the Client.I am using getBytes() method to convert
data to bytes[] and this line gives the error. Whenever I comment this
line there is no Exception and Client recieves an empty message. Can
anybody figure out where is the problem.

int length=1024;
byte[] buf=new byte[length];
byte[] data= new byte[length];
int visit=1;
try {
DatagramSocket listener = new DatagramSocket(port);
//Socket serverSocketAccepted;
DatagramPacket packet= new DatagramPacket(buf,length);
while(true)
{
listener.receive(packet);
InetAddress clientAddr = packet.getAddress();
int clientPort = packet.getPort();


// Here I will read the data

long time =
System.currentTimeMillis();
Date d= new Date(time);
String date=d.toString();
--------------> data=date.getBytes(); // When this line is
absent there is no Exception

DatagramPacket packetSend= new
DatagramPacket(data,length,clientAddr,clientPort);


listener.send(packetSend);
}


Thanks,
Aamir
 
G

Gordon Beaton

I am new to Socket Programming. I am trying to send data using UDP
but I get the IllegalArgument Exception but I can't find why I am
getting this exception.

Always post the exact text of the exception, and mark the line number
it indicates!

I believe that your exception is because you attempt to send "length"
bytes of data, but the data array is shorter than you expect.

Realize that "data = date.getBytes();" does not initialize the array
contents, it *replaces* the array altogether. The new array is likely
much shorter than the original one in this case.

The solution here is to specify data.length() when you create the
DatagramPacket from data.

/gordon
 
A

aamircheema

It works! Thanks a lot Gordon


Gordon said:
Always post the exact text of the exception, and mark the line number
it indicates!

I believe that your exception is because you attempt to send "length"
bytes of data, but the data array is shorter than you expect.

Realize that "data = date.getBytes();" does not initialize the array
contents, it *replaces* the array altogether. The new array is likely
much shorter than the original one in this case.

The solution here is to specify data.length() when you create the
DatagramPacket from data.

/gordon
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,262
Messages
2,571,044
Members
48,769
Latest member
Clifft

Latest Threads

Top