Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[C++ / Winsock] Kan geen connectie maken (10061)

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo Tweakers,

Ik ben nu al een tijdje bezig met het maken van een applicatie dat dmv winsock een connectie legt met een IRC server. Nu lukken me wel aardig wat dingen, namelijk host omzetten naar IP etc, maar zodra ik naar een server wil verbinden krijg ik een fout.

Het rare is voor mij dat hij wel naar localhost kan verbinden, maar zodra ik naar een extern address wil verbinden schiet hij dicht. Hierbij krijg ik fout code 10061, volgens google geeft 10061 aan dat de remote server mijn connectie blockt.

Hier is mijn code:

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <winsock2.h>
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
        
    char hostName[255];
    int  port;
    
    // Get host + ip of IRC Server
    cout << "IRC Host: ";
    cin >> hostName;
    
    cout << "Port    : ";
    cin >> port;
    
    cout << endl << "Connecting to " << hostName << endl << endl;
    
    // Preparing WSA
    WSADATA wsaData;
    WORD wsVersion = MAKEWORD(2,0); 
    
    // Load WSA
    if((WSAStartup(wsVersion, &wsaData)) != 0) {
                              
         cout << "Error while starting WSA" << endl << endl;
         system("pause");
         return 0;
    
    }
    
    // Resolving IP adres
    hostent *hostIP;
    hostIP = gethostbyname(hostName);
    
    // Creating socket
    SOCKET ircSock;
    ircSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(ircSock == INVALID_SOCKET) {
    
         cout << "Could not create socket" << endl;
         system("pause");
         WSACleanup();
         return 0;           

    }
    
    // Socket / Connection information
    SOCKADDR_IN sockAddr;
    sockAddr.sin_port = port;
    sockAddr.sin_family = AF_INET;
   
    // IP information
    sockAddr.sin_addr.S_un.S_un_b.s_b1 = (int)hostIP->h_addr_list[0][0];
    sockAddr.sin_addr.S_un.S_un_b.s_b2 = (int)hostIP->h_addr_list[0][1];
    sockAddr.sin_addr.S_un.S_un_b.s_b3 = (int)hostIP->h_addr_list[0][2];
    sockAddr.sin_addr.S_un.S_un_b.s_b4 = (int)hostIP->h_addr_list[0][3];

    // Connect to IRC server
    if(connect(ircSock, (SOCKADDR *)&sockAddr, sizeof(sockAddr)) == SOCKET_ERROR) {
                        
         cout << "Unable to connect to server: " << WSAGetLastError() << endl;
         system("pause");
         WSACleanup();
         return 0;                    
                        
    }
        
    cout << "Succes" << endl;
    
    WSACleanup();
    system("PAUSE");
    return 0;
}


Bij het SOCKADDR_IN gedeelte waar ik bijv het IP vast leg heb ik ook het volgende geprobeerd om een IP aan te geven:

C++:
1
sockAddr.sin_addr.s_addr = inet_addr("xxx.xxx.xxx.xxx");


Echter bleef het resultaat hetzelfde.

Het probleem is dus eigelijk dat ik niet naar buiten kan verbinden, maar enkel naar applicaties die onder localhost vallen. Iemand een idee hoe ik dit op kan lossen?

Alvast bedankt :)

  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

Moet sockAddr.sin_port = port; niet sockAddr.sin_port = htons(port); zijn?

Skill is when luck becomes a habit.


Verwijderd

Topicstarter
Hmm, is htons iets speciaals voor over het internet ofzo? Het werkt nu namelijk perfect en ik kan connectie maken. Raar dat het locaal wel werkte zonder htons..

Maarja het werkt.. Bedankt! :)

Verwijderd

The htons function returns the value in TCP/IP network byte order.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

network byte order is big endian, jouw machine is waarschijnlijk little endian. htons() zorgt voor een goede conversie, ongeacht het platform waar je op werkt.

[ Voor 33% gewijzigd door .oisyn op 28-10-2007 18:13 ]

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.


Verwijderd

Topicstarter
Aha, best slecht dan dat veel tutorials dat er niet bij heeft staan.
Pagina: 1