• Как соединить 2 компа, подключенных к инету: на одном запустить один экземпляр моей программы, на другом - другой, и чтобы экземпляры общались по TCP?

    @none7
    1. IPAddress.Any порт любой какой пожелаете, у каждого сетевого интерфейса есть адрес, его и указывать на удалённой машине, ну или в DNS прописывать. Все адреса системы можно получить через Dns.GetHostAddresses (Dns.GetHostName())
    2. Разве, что брандмауэр настроить, если включен
    3. С компом имеющим "белый" IPv4-адрес или IPv6-адрес любой может запросить соединение независимо от сети и расстояния до этой сети. В случае компа за NAT, только находящиеся в той же сети или через UDP + STUN
    Ответ написан
    Комментировать
  • Как сменить кодировке в php программе?

    @none7
    str_split($worktest);
    заменить на
    preg_split('/(.)/us', $worktest, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
    Ответ написан
    Комментировать
  • Как получить имя текущего юзера в C++?

    @none7
    Windows ведь. В заголовках фунция определена так:
    BOOL WINAPI GetUserNameW(LPWSTR  lpBuffer, LPDWORD lpnSize);
    BOOL WINAPI GetUserNameA(LPSTR  lpBuffer, LPDWORD lpnSize);
    #ifdef _UNICODE
    #define GetUserName GetUserNameW
    #else
    #define GetUserName GetUserNameA
    #endif

    Решения на выбор:
    • Убрать в настройках компиляции определение _UNICODE
    • Использовать GetUserNameA
    • Переписать с использованием TCHAR, size при этом должен быть sizeof(buffer) / sizeof(*buffer)

    И да asd111 прав буфер обязан быть размером UNLEN+1, иначе может случится переполнение буфера, хоть это и маловероятно.
    Ответ написан
    4 комментария
  • Как настроить IPv6 на роутере с прошивкой Wive-NG-RTNL?

    @none7
    В старых примерах оно выглядело примерно так:
    ifconfig sit0 up 
    ifconfig sit0 add $ipv6host/64
    route -A inet6 add 2000::/3 gw ::216.66.80.90 dev sit0

    Такое должно работать, ведь это на основе мануала для ядер 2.2.
    Но обычно рекомендуют использовать /sbin/ip, так как там самые свежие настройки сети.
    ipv4gw=216.66.80.90
    ipv4host=109.106.136.232
    ipv6host=2001:470:27:6   :2/64 #! исправьте 
    ip tunnel add he-ipv6 mode sit remote $ipv4gw local $ipv4host ttl 255
    ip link set he-ipv6 up
    ip -6 addr add $ipv6host/64 dev he-ipv6
    ip -6 route add ::/0 dev he-ipv6

    если и это не помогло, то нужен более свежий iproute.
    Ответ написан
  • Как сервер может узнать, что клиент оборвал TCP соединения?

    @none7
    Если FIN пакет не пришёл, то только таймауты.
    Ответ написан
    Комментировать
  • Как на Ассемблере сделать сложные условия?

    @none7
    Если именно а,b,c, и не экономить каждый байт, то
    cmp ax, 'a'
    setb cl
    cmp ax, 'c'
    seta ch
    or ch, cl
    jne default
    call [ax + jump_table - 'a']
    default:
    ret
    jump_table dd getHelp, openTextEditor, reboot
    Ответ написан
    1 комментарий
  • Как разобраться во всех этих синтаксисах ассемблера?

    @none7
    Суть любого ассемблера в превращении мнемоник команд в машинные коды операций(опкоды), ну и расчёт относительных смещений по именованным меткам. Сами коды операций одни и те же в рамках архитектуры процессора. Можно даже ассемблировать программу для Windows, а запускаясь в Linux Wine напрямую обращаться к системным вызовам ядра Linux. Различные ассемлеры(программы) имеют различное оформление кода, где сегменты кода, где данных и множество других малоизвестных опций, скармливаемых линкеру и ОС. MASM и TASM различаются только в этом, но можно написать и совместимый код, мнемоники команд FASM отличаются незначительно, но в целом все они используют Intel-синтаксис. То есть мнемоники команд выглядят абсолютно идентично. С GAS использующем AT&T-синтаксис несколько сложнее, мнемоники по существу те же, но каждой инструкции приставляется размер операндов и сам порядок операндов обратный. Пример расширения регистра 1 байт в 4 байта(move xxxb x=Zero):
    movzx ecx, al (Intel);
    movzxbl %al, %ecx (AT&T movzxb(yte)l(ong))

    Обе мнемоники дадут один и тот же код операции. Ассемблеры использующие AT&T-синтаксис есть не только для x86 и amd64, но сами мнемоники как и коды операций естественно другие.
    Дизассемблер как должно быть понятно из названия превращает коды операций в мнемоники, иногда анализируя код глобально, разделяя на процедуры, находя их вызовы или даже сопоставляя со структурами и массивами. Синтаксис тут на выбор разработчика дизассембера.
    Ответ написан
    2 комментария