Есть ли какая-либо кросс-платформенная перфорация NAT с открытым исходным кодом throughs?

Почему нет ошибки типа

Тип проверяется в соответствии с array-element-type массива:

(defparameter w (create-jvector :element-type 'fixnum))

(array-element-type (jvector-vector v))
=> T

(array-element-type (jvector-vector w))
=> FIXNUM

Нажатие символа на W приводит к ошибке. Как сказал jkiiski, тип используется главным образом, чтобы помочь компилятору иметь возможность использовать специализированные представления для массивов (битвекторы, строки, ...).

integer может быть bignum, поэтому тип обновленного элемента: T:

(upgraded-array-element-type 'integer)
=> T

Как решить вашу проблему

Это решение подсказано jkiiski, а именно добавить тип в структуру; здесь я также переопределяю конструктор непосредственно из структуры:

(defstruct (j2vector
             (:constructor make-jvector
                           (element-type
                            &aux
                            (start 0)
                            (vector (make-array 0
                                                :adjustable t
                                                :fill-pointer 0
                                                :element-type element-type)))))
  element-type
  vector
  (start 0 :type (integer 0)))

Затем вы явно проверяете тип:

(defun push-jvector (elt jvec)
  (assert (typep elt (j2vector-element-type jvec)) ())
  (vector-push-extend elt (j2vector-vector jvec)))
7
задан GEOCHET 27 February 2009 в 16:32
поделиться

3 ответа

Я не видел один, но Вы найдете больше информации, чем Вы требуете здесь:

http://www.enchantedage.com/node/8

Не ужасно трудно реализовать, просто немного работы.

Существует код на странице, которая демонстрирует это, которое основывается на Unix и окнах, включая обоих часть сервера (introducer) и клиентские части. Это не перечисляет лицензию, но автор указывает в readme, что техника является бесплатной, и перереализация его от информации на странице, и пример исходного кода, кажется, относительно легок.

Автор, кажется, владелец веб-сайта enchantedage, таким образом, можно, вероятно, связаться с ними непосредственно для получения дополнительной информации.

2
ответ дан 7 December 2019 в 14:38
поделиться

У меня нет ответа здесь, я боюсь, но я действительно знаю, что несколько лет назад было некоторое исследование, проведенное в области, которая закончила тем, что породила некоторые документы IETF. Любопытный читатель мог бы уже быть знаком с ними:

0
ответ дан 7 December 2019 в 14:38
поделиться

Лучшее, что я видел, это UDT , это надежная библиотека UDP, которая также включает режим соединения «рандеву», который помогает позаботиться о перфорации NAT. Все, что вам нужно сделать, это выяснить внешний IP-адрес и порт и каким-то образом передать его другому клиенту (и наоборот). Узнав эту информацию, вы одновременно подключаетесь и выполняете привязку (с установленным режимом рандеву), и он сделает все возможное, чтобы выяснить остальное.

2
ответ дан 7 December 2019 в 14:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: