Skip to Main Content

Java Programming

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

UDP Server hangs

807588Mar 4 2009 — edited Mar 4 2009
Hello,

I'm trying to code a client/server application, based on udp. When the client send requests to the server on low rate, everything works just fine. But, multiple clients try to access the servers, some requests may causes the server to hangs. Here are relevant snippets from the thread dumps of both client and server when hang:

SERVER:
"UDPListener" prio=10 tid=0x08a19c00 nid=0x5c7c runnable [0x3043f000..0x3043fdb0]
java.lang.Thread.State: RUNNABLE
at java.net.PlainDatagramSocketImpl.receive0(Native Method)
- locked <0x3c61c120> (a java.net.PlainDatagramSocketImpl)
at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:136)
- locked <0x3c61c120> (a java.net.PlainDatagramSocketImpl)
at java.net.DatagramSocket.receive(DatagramSocket.java:712)
- locked <0x325770d8> (a java.net.DatagramPacket)
- locked <0x3c61c180> (a java.net.DatagramSocket)
at com.site.commons.pattern.kota.HashRAMRMIService$1.run(HashRAMRMIService.java:464)

CLIENT:
"http-8080-3" daemon prio=10 tid=0x090b7000 nid=0x3b84 runnable [0x181e5000..0x181e5fb0]
java.lang.Thread.State: RUNNABLE
at java.net.PlainDatagramSocketImpl.receive0(Native Method)
- locked <0x91ddcf48> (a java.net.PlainDatagramSocketImpl)
at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:136)
- locked <0x91ddcf48> (a java.net.PlainDatagramSocketImpl)
at java.net.DatagramSocket.receive(DatagramSocket.java:712)
- locked <0x91de01f8> (a java.net.DatagramPacket)
- locked <0x91ddcf20> (a java.net.DatagramSocket)
at com.site.commons.pattern.kota.management.DataPartitioner.getViaUDP(DataPartitioner.java:169)
at com.site.advertiser.AdvertiserServlet.doGet(AdvertiserServlet.java:371)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:856)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:565)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1509)
at java.lang.Thread.run(Thread.java:619)

I'm attaching a code snippet demonstarting how the server side socket is established and serving requests:
socket = new DatagramSocket( port(name) );

new Thread( "UDPListener-" + name )
{
public void run()
{
while( true )
{
try
{
byte[] buf = new byte[2048];

DatagramPacket packet = new DatagramPacket( buf, buf.length );

socket.receive( packet );

Serializable key = (Serializable) new ObjectInputStream( new ByteArrayInputStream( buf ) ).readObject();

Serializable value = get( key );

byte[] asByteArray = null;

if( value != null )
{
asByteArray = asByteArray( value );
}
else
{
asByteArray = new byte[0];
}

InetAddress address = packet.getAddress();

int port = packet.getPort();

packet = new DatagramPacket(asByteArray, asByteArray.length, address, port);

socket.send(packet);
}
catch ( Exception e )
{
logger.error( "Failed to serve udp request", e );
}
}
}
}.start();
Is this hang expected in scenario of multiple client accessing one udp server?

10x,

Barak.
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Apr 1 2009
Added on Mar 4 2009
8 comments
612 views