Java tutorial
/** * Copyright (C) 2009-2013 Barchart, Inc. <http://www.barchart.com/> * * All rights reserved. Licensed under the OSI BSD License. * * http://www.opensource.org/licenses/bsd-license.php */ package com.barchart.udt; import static org.junit.Assert.*; import static util.UnitHelp.*; import java.io.File; import java.net.InetSocketAddress; import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.apache.commons.io.FileUtils; import org.junit.Ignore; import org.junit.Test; import util.TestAny; /** * FIXME */ @Ignore public class TestSocketFile extends TestAny { /** * verify basic file send/receive */ @Test(timeout = 10 * 1000) public void fileTransfer() throws Exception { final InetSocketAddress addr1 = localSocketAddress(); final InetSocketAddress addr2 = localSocketAddress(); final SocketUDT peer1 = new SocketUDT(TypeUDT.STREAM); final SocketUDT peer2 = new SocketUDT(TypeUDT.STREAM); peer1.setBlocking(false); peer2.setBlocking(false); peer1.setRendezvous(true); peer2.setRendezvous(true); peer1.bind(addr1); peer2.bind(addr2); socketAwait(peer1, StatusUDT.OPENED); socketAwait(peer2, StatusUDT.OPENED); peer1.connect(addr2); peer2.connect(addr1); socketAwait(peer1, StatusUDT.CONNECTED); socketAwait(peer2, StatusUDT.CONNECTED); log.info("state 0 - connected"); log.info("peer1 : {}", peer1); log.info("peer2 : {}", peer2); final int size = 64 * 1024; final Random random = new Random(0); final byte[] array1 = new byte[size]; final byte[] array2 = new byte[size]; random.nextBytes(array1); random.nextBytes(array2); final File folder = new File("./target/file"); folder.mkdirs(); final File source = File.createTempFile("source", "data", folder); final File target = File.createTempFile("target", "data", folder); FileUtils.writeByteArrayToFile(source, array1); FileUtils.writeByteArrayToFile(target, array2); assertEquals(size, source.length()); assertEquals(size, target.length()); assertFalse("files are different", FileUtils.contentEquals(source, target)); // sender final Runnable task1 = new Runnable() { @Override public void run() { try { log.info("init send"); final long length = peer1.sendFile(source, 0, size); assertEquals(length, size); } catch (final Exception e) { log.error("", e); } } }; // receiver final Runnable task2 = new Runnable() { @Override public void run() { try { log.info("init recv"); final long length = peer2.receiveFile(target, 0, size); assertEquals(length, size); } catch (final Exception e) { log.error("", e); } } }; final ExecutorService executor = Executors.newFixedThreadPool(2); executor.submit(task1); executor.submit(task2); Thread.sleep(5 * 1000); executor.shutdownNow(); assertTrue("files are the same", FileUtils.contentEquals(source, target)); peer1.close(); peer2.close(); } }