public void testStream () throws IOException {
		final int largeDataSize = 12345;

		final Server server = new Server(16384, 8192);
		server.getKryo().setRegistrationRequired(false);
		startEndPoint(server);
		server.bind(tcpPort, udpPort);
		server.addListener(new Listener() {
			public void connected (Connection connection) {
				ByteArrayOutputStream output = new ByteArrayOutputStream(largeDataSize);
				for (int i = 0; i < largeDataSize; i++)
					output.write(i);
				ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray());
				// Send data in 512 byte chunks.
				connection.addListener(new InputStreamSender(input, 512) {
					protected void start () {
						// Normally would send an object so the receiving side knows how to handle the chunks we are about to send.
						System.out.println("starting");
					}

					protected Object next (byte[] bytes) {
						System.out.println("sending " + bytes.length);
						return bytes; // Normally would wrap the byte[] with an object so the receiving side knows how to handle it.
					}
				});
			}
		});

		// ----

		final Client client = new Client(16384, 8192);
		client.getKryo().setRegistrationRequired(false);
		startEndPoint(client);
		client.addListener(new Listener() {
			int total;

			public void received (Connection connection, Object object) {
				if (object instanceof byte[]) {
					int length = ((byte[])object).length;
					System.out.println("received " + length);
					total += length;
					if (total == largeDataSize) {
						success = true;
						stopEndPoints();
					}
				}
			}
		});

		client.connect(5000, host, tcpPort, udpPort);

		waitForThreads(5000);
		if (!success) fail();
	}