Как я могу использовать netcat (nc) для модели клиент-сервера чата?

Спасибо @derobert за рекомендацию мне приложения Dragbox.

Dragbox делает именно то, что мне нужно. Например, у меня есть папка с несколькими файлами .png, которые я хотел бы перетащить в Chromium. Внутри этой папки выполнение dragbox * .png создает следующее окно:

A GUI window with the names of several files listed

Я могу использовать свою мышь, чтобы перетаскивать файлы оттуда в Chromium, и это работает безупречно. Однако добраться до этого момента было нелегко. Насколько мне известно, Dragbox официально поддерживает только системы Debian. Я не мог найти нигде, что изначально работало для Arch. Итак, я написал пошаговое руководство, как заставить Dragbox работать в Arch Linux. Это почти то же самое, что я сделал на своей машине, с парой модификаций, чтобы следовать лучшим практикам. Если где-то возникла ошибка, вы можете посмотреть в истории изменений этого ответа именно , что я делал на своей машине.

  1. Клонируйте исходный код Dragbox на свой компьютер, выполнив git clone https://github.com/engla/dragbox.git
  2. . Будет создан новый каталог под названием dragbox внутри вашего текущего рабочий каталог. Зайти внутрь.
  3. Для установки Dragbox и Dragbox требуется Python 2, который входит в стандартную комплектацию Arch Linux. Однако он ожидает, что Python 2 будет установкой Python по умолчанию, что неверно для Arch. Чтобы обойти это, выполните export PYTHON = / bin / python2 . Пока вы не закроете текущее окно терминала, переменная среды $ PYTHON будет иметь значение / bin / python2 . Скрипты установки Dragbox проверяют это и будут использовать его поверх Python 3.
  4. Выполнить ./ autogen.sh , ./ configure , make и сделать установку . make install должен выполняться с правами root (например, sudo make install ).
  5. Dragbox теперь установлен на вашем компьютере, но он попытается использовать Python 3 для запуска. С правами root откройте / usr / local / bin / dragbox в текстовом редакторе. Измените shebang (первая строка, которая сообщает вашей оболочке, с каким исполняемым файлом запускать скрипт) с #! / Usr / bin / env python на #! / Usr / bin / env python2 .
  6. Теперь скрипт работает, но не может найти модуль, содержащий актуальную программу. Есть несколько способов исправить это.

    1. Включите в свой ~ / .bashrc или аналогичный строку, читающую export PYTHONPATH = $ PYTHONPATH: немедленно (например, без пробела между), следуя моему пути к каталог. Python теперь будет искать в этом каталоге при попытке импортировать модули. Внутри каталога, созданного на шаге 1, будет каталог с именем Dropbox / (с большой буквы D). Скопируйте этот каталог в каталог, который вы добавили в свой $ PYTHONPATH (например, если вы написали export PYTHONPATH = $ PYTHONPATH: ~ / python / modules , скопируйте Dragbox / ] для создания каталога ~ / python / modules / Dragbox / ).

    2. Вероятно, худшая практика, но вы можете скопировать тот же каталог в каталог, который уже находится в вашем $ PYTHONPATH . Например, вы можете скопировать его, чтобы создать /usr/lib/python2.7/site-packages/ .

Если вы выполнили эти шаги, Dragbox должен работать! Теперь вы можете запустить man dragbox , чтобы узнать больше о том, как его использовать, и запустить его, просто набрав dragbox .

1
08.02.2016, 05:55
2 ответа

Wraph NC вызовы с небуферизованным SED вызовы:

sed -u "s/^/My name: /" | nc PARTNER_IP 2015

sed -u "s/^/Partner name: /" | nc -l 2015
0
27.01.2020, 23:51

Функция ReadPip ()
{
echo "Введите свой partener IP"
Прочитайте IP
Export PIP = $ IP
}

Пространство после того, как знак равенства - это синтаксис ошибка. Но, кроме того, все это может быть восстановлено только на

readPip () {
    read -p "Enter your partner's IP: " PIP
}

Экспорт не нужно, поскольку вам не нужны внешние дочерние процессы, чтобы иметь доступ к этой переменной.

Функция Readmip ()
{
MIP = IP Addr List eth0 | Greep "Inet" | Cut -D '' -F6 | Cut -D / -F1
Echo -n «Мой IP Это «$ MIP»
Export MiP = $ MIP
}

снова, это содержит ошибку; вы назначаете MIP значение IP , а затем (попробуйте to) Запустите команду List Addr ... , где, по-видимому, намерение запустить List addr ... и назначить результат этого на MIP

readMip () {
    ip addr list eth0 |grep "inet " |cut -d' ' -f6|cut -d/ -f1`
}

Здесь я бы просто оставил присвоение абонента ( readpip может быть повторно повторно отменить одинаково для согласованности).

в основном коде, вы получите

MIP=$(readMip)

снова, Экспорт не является ни необходимым, ни полезным.

Функциональный чат ()
{
[[$ PIP! = ""]] && NC $ PIP 2015
[[$ PIP == »"]] && NC -L -P 2015
}

Это явно «если - тогда - else» и должно быть написано соответственно.

chat () {
    if [[ "$PIP" == " " ]]; then
        nc -l -p 2015
    else
        nc "$PIP" 2015
    fi
}

Или даже

[[ "$PIP" == " " ]] && nc -l -p 2015 || nc "$PIP" 2015

обратите внимание также, что я бросил функцию только на Bash . У вас все еще есть пару басизмов здесь, но они могут быть триветически повторными для портативного сценария POSIX.

1
27.01.2020, 23:51

Теги

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