Package net.i2p.client

Interfaces and factories for the base I2P SDK used to develop applications that communicate through I2P.

Implementation moved to net.i2p.client.impl in 0.9.21.

When a client application wants to communicate over I2P, the first thing it needs to do is get a I2PClient from the I2PClientFactory. If it does not already have a Destination, it must generate one with the I2PClient.createDestination( before proceeding. Once it has one, it then creates an I2PSession which serves as the bridge to the I2P network, allowing it to send messages (via I2PSession.sendMessage(, byte[])) and receive messages (via I2PSession.receiveMessage(int)). In addition, the client receives asynchronous notification of network activity by providing an implementation of I2PSessionListener.

This client package provides the basic necessity for communicating over I2P, but there are three other subpackages that are helpful. Specifically:

  • net.i2p.client.datagram - for applications that want their messages to be both authenticated and repliable
  • net.i2p.client.naming - for applications that want to resolve readable names into Destinations
  • net.i2p.client.streaming - for applications that want to use a streaming API to provide reliable in order message delivery (note: the streaming library is packaged seperate from the main SDK - in the mstreaming.jar and streaming.jar)

The I2PSession implementation itself communicates with the I2P router by the I2CP (the client protocol).