Toon posts:

[c++] winsock client "connection refused"

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hieronder vind je een stukje van een client socket klasse, waarin een socket wordt aangemaakt en verbinding krijgt. Het aanmaken van de socket lukt, maar de Connect() regel met de threaded server wil niét lukken (asynchrone socket). 'Connection refused' zegt de foutmelding van winsock dan.

Deze wrapper klasse zal volledig open-source worden als hij af is.
Heeft er iemand een idee waarom hij niet wil connecten?

[edit] bij regel 27 krijgt hij de waarde false dus

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
bool CClientSocket::Connect(string address, int port)
{
    if (bValid)
    {
        int errorval, result;

        // setup socket gegevens
        sockaddr_in sinInterface;
        sinInterface.sin_family = AF_INET;
        sinInterface.sin_addr.s_addr = inet_addr(address.c_str());
        sinInterface.sin_port = port;
    
        // maak socket aan
        sock = socket(AF_INET, SOCK_STREAM, 0);

        // kijk of de socket geldig is
        if (sock == INVALID_SOCKET)
        {
            WSACleanup();
            return false;
        }

        // verbind met adress    
        result = connect(sock, (sockaddr*)&sinInterface, sizeof(sockaddr_in));
    
        // kijk of verbinding gelukt is
        if (sock==0 || result!=0)
            return false;

        return true;
    }
    return false;
}

[ Voor 4% gewijzigd door Verwijderd op 27-03-2003 20:55 ]


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

Is port wel in network byte order? Ook heeft de sock==0 check in de laatste if weinig zin en is het ook fout. 0 is in principe een geldige socket handle waarde (alleen INVALID_SOCKET niet), al zal ie niet gauw voorkomen. Maar daarnaast wordt de sock variabele ook niet aangepast door connect (gaat by value niet by reference). Zou ook niet mooi zijn want dan is ie niet meer te closen.
edit: je kunt htons gebruiken om van host -> network byte order te converteren.

[ Voor 11% gewijzigd door madwizard op 27-03-2003 21:49 ]

www.madwizard.org


Verwijderd

Topicstarter
madwizard schreef op 27 maart 2003 @ 21:44:
Is port wel in network byte order? Ook heeft de sock==0 check in de laatste if weinig zin en is het ook fout. 0 is in principe een geldige socket handle waarde (alleen INVALID_SOCKET niet), al zal ie niet gauw voorkomen.
Wist ik niet, ik zal het aanpassen :)
Maar daarnaast wordt de sock variabele ook niet aangepast door connect (gaat by value niet by reference). Zou ook niet mooi zijn want dan is ie niet meer te closen.
ik voél me niet n00b, ik bén n00b :P
edit: je kunt htons gebruiken om van host -> network byte order te converteren.
Die functie ga ik es opzoeken.

[edit] thanks :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

dit is voor je 3d game engine, neem ik aan? Dan kun je beter UDP gebruiken dan TCP... minder overhead en over het algemeen sneller. Bovendien ook veel nuttiger voor games, omdat die op de hoogte hoeven zijn van de algehele stream. Als er een pakketje zoek raakt boeit dat in een spel niet, de volgende update volgt toch snel. Bij TCP moet dat hele pakketje weer opnieuw verzonden worden (terwijl je er dus in principe niet eens in geinteresseerd bent als je de volgende al hebt), en daar kan nogal eens wat tijd tussen liggen.

De host stuurt namelijk dat pakketje, maar krijgt nooit een acknowledgement. Dan moet ie de hele timeout afwachten voordat het pakketje opnieuw verzonden wordt. In de tussentijd staat de pc aan de andere kant uit z'n neus te vreten, omdat ie moet wachten op dat ene pakketje voordat ie de verder kan met de rest van de stream

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.