Связность P2P в двух словах. Предположим, мы говорим о UDP здесь. Следующие шаги также могут применяться к TCP с некоторыми настройками.
** - обычно лучше всего не делать этого полагаться на хорошо известный порт для клиентов P2P. Поскольку два клиента за одним и тем же NAT или брандмауэром вряд ли смогут использовать ваше программное обеспечение в то же время.
Ниже приведен краткий обзор некоторых технологий для изучения.
STUN - простой сервер и протокол для клиентов за NAT / маршрутом, чтобы узнать, каковы их внешние сопоставления IP и портов.
TURN - это расширение для STUN, но поддерживает ретрансляцию для сценариев подключения P2P, где брандмауэры и NAT предотвращают прямые подключения.
ICE - это набор шагов, с помощью которых STUN и TURN используются для настройки соединения P2P , ICE является формальным протоколом для шагов 1-5 выше. Два превосходных набора слайдов на ICE здесь здесь и здесь .
WebRTC является вариантом стандарта ICE в качестве справочной библиотеки для создания сеансов P2P с помощью STUN и TURN.
UPNP + Протокол интернет-шлюза - Некоторые маршрутизаторы поддерживают это для хостов для автоматического получения сопоставлений портов.
libnice - это библиотека C с открытым исходным кодом для Linux (и может работать на Windows), которая реализует ICE.
libjingle - еще одна реализация ICE ( в C ++) из Google. Для Windows и Linux.
PJNATH - это библиотека в наборе библиотек кодирования PJSIP . Это хорошая реализация стека ICE (код C) и была перенесена на множество платформ. (Windows, Linux, Mac, iOS, Symbian и вскоре Android).
И, наконец, у меня есть вопиющий штепсель для вас, чтобы использовать мою базу кода сервера STUN .
Я думаю, что нет, по крайней мере, не, если Ваш источник оптимизирован и т.д. Однако существуют некоторые макросы для gdb, который может осмотреть контейнеры STL для Вас:
http://sourceware.org/ml/gdb/2008-02/msg00064.html
Однако я не использую это, таким образом, YMMV
Эти stl-views.gdb
раньше был лучшим ответом было, но не больше.
Это еще не интегрируется в магистраль GDB
, но здесь - то, что Вы получаете использование ответвления 'archer-tromey-python' :
(gdb) list
1 #include <map>
2 int main(){
3 std::map<int,int> m;
4 m[1] = 2;
5 m[2] = 4;
6 return 0;
7 }
(gdb) break 6
Breakpoint 1 at 0x8048274: file map.cc, line 6.
(gdb) run
Breakpoint 1, main () at map.cc:6
6 return 0;
(gdb) print m
$1 = std::map with 2 elements = {
[1] = 2,
[2] = 4
}
(gdb) quit
Всегда существует очевидное: Определите свою собственную тестовую функцию... Назовите его от gdb. Например:
#define SHOW(X) cout << # X " = " << (X) << endl
void testPrint( map<int,int> & m, int i )
{
SHOW( m[i] );
SHOW( m.find(i)->first );
}
int
main()
{
std::map<int,int> m;
m[1] = 2;
m[2] = 4;
return 0; // Line 15.
}
И:
....
Breakpoint 1 at 0x400e08: file foo.C, line 15.
(gdb) run
Starting program: /tmp/z/qD
Breakpoint 1, main () at qD.C:15
(gdb) call testPrint( m, 2)
m[i] = 4
(*m.find(i)).first = 2
(gdb)
Попытайтесь Разыменовать Контейнеры STL: на этой странице: http://www.yolinux.com/TUTORIALS/GDB-Commands.html