How low level do you need? Usually when I am doing networking with Java, I use a ServerSocket if I need to accept connections, and Socket when I need to connect to another machine. Socket will use a TCP connection... if you need a UDP connection, I think you can use a DatagramSocket.
These classes abstract away the cross platform details, so unless you really need to see the packet level information, these are really useful.
Update: It looks like if you use UDP with DatagramSocket, you can send and receive packets using DatagramPacket, but it looks like that still abstracts away all but the address/port and data being sent.
EDIT: Whoever keeps downvoting me, please look at his initial question before you downvote this... it wasn't clear that he NEEDED actual packet access, and I was trying to see if he REALLY needed it... sockets in Java are more than sufficient if you are not building something like ethereal/wireshark.