Что BitTorrent и Gnutella используют для обхода NAT при передаче файлов?

Я пытаюсь создать протокол / программное обеспечение для обмена файлами p2p на Java. Я заинтересован в изучении использования сокетов, поэтому я не буду использовать JXTA или какой-либо другой API.

Я читал о перфорации отверстий TCP, и это может не работать со всеми типами NAT. Но я вижу, что Gnutella и BitTorrent всегда работают на каждой машине / NAT, которые я пробую. Так используют ли они пробивку отверстий TCP для установления соединения между хостами?

Кроме того, подобный код будет выполнять пробивание отверстий TCP?

    final ServerSocket s = new ServerSocket(7777);
    Thread t = new Thread(new Runnable(){

        public void run() {
            try
            {
                s.accept();
            }
            catch(Exception ex)
            {

            }
        }
    });

    Socket sock = new Socket();
    sock.connect(new InetSocketAddress("IP ADDRESS", 7777), 50000);
16
задан Cœur 3 September 2017 в 11:50
поделиться