Iseva ye-SOCKS5 ibhala amabhayithi amane ngokwehlukana, futhi iklayenti lisebenza kuphela uma lokho kubhala sekuhlanganisiwe. Ukuhlanganisa kungashintsha isikhathi, kodwa i-TCP ayikathembisi ukufunda okukodwa ngakunye kokubhala.

Iklayenti lidinga umhlaziyi wempendulo. Ngemuva kokukhetha indlela nanoma yikuphi ukuqinisekiswa okudingekayo, impendulo yomyalo we-SOCKS5 iqala ngamabhayithi amane: inguqulo, umphumela, ibhayithi egciniwe kanye nohlobo lwekheli. Ubude obusele buncike kulolo hlobo lwekheli.

Umhlaziyi we-.NET 7+ odinga kuphela ukusebenzisa impendulo ye-CONNECT ephumelelayo angasebenzisa:

static async Task ReadConnectReply(Stream stream, CancellationToken ct)
{
    byte[] prefix = new byte[4];
    await stream.ReadExactlyAsync(prefix, ct);
    if (prefix[0] != 5 || prefix[2] != 0)
        throw new IOException("Invalid SOCKS5 reply");
    if (prefix[1] != 0)
        throw new IOException($"SOCKS5 request failed: {prefix[1]}");

    int remaining;
    switch (prefix[3])
    {
        case 1: remaining = 4 + 2; break;
        case 4: remaining = 16 + 2; break;
        case 3:
            byte[] length = new byte[1];
            await stream.ReadExactlyAsync(length, ct);
            remaining = length[0] + 2;
            break;
        default:
            throw new IOException("Unknown SOCKS5 address type");
    }
    await stream.ReadExactlyAsync(new byte[remaining], ct);
}

Amabhayithi amabili okugcina iyimbobo eboshiwe. I-IPv4 idinga amabhayithi amane; i-IPv6 idinga ayishumi nesithupha; ikheli lesizinda lithwala ibhayithi yobude ngaphambi kwegama.

Nikeza ithokheni yokukhansela nesikhathi sokuxoxisana esihlosiwe. I-ReadExactlyAsync iphatha ukufunda okukodwa okufushane futhi iphonsa okuhlukile lapho umfudlana uphela ngaphambi kobude obuceliwe. Uma kuhluleka, lahla ukuxhumana okuhlulekile ngomzila wokuhlanza womnikazi waso.

Uma kuphumelela, ma emkhawulweni wempendulo. Amabhayithi angemuva kwawo angawephrothokholi yendawo ewukuphela. Ukufunda okukhulu kokucabanga kufanele kulondoloze amabhayithi asele esikhundleni sokuphonsa ukuqala komfudlana wohlelo lokusebenza.

Izihloko ezihlobene