Member 13606974 Ответов: 1

Проблема с сервером MSN (Программирование сокетов linux)


Я пытаюсь использовать MSN messenger с открытым исходным кодом(самая старая версия tmsnc), и сейчас он не поддерживается.
Проблема заключается в части сокета он пытается подключиться hotmail.messenger.com (как адрес хоста), который больше не поддерживается, я искал об этом, и некоторым парням было предложено использовать
Цитата:
messenger.hotmail.geo.msnmessenger.msn.com.akadns.net

вместо этого, но после того, как он дает мне сервер в других частях, таких как send (), он дает мне сброс соединения по ошибке однорангового узла или иногда даже не может связать его.

Возможно ли это вообще исправить? может путем замены другого сервера или ...

Что я уже пробовал:

комментируемая часть-это моя, где я пытался смоделировать исходную часть с помощью getaddrinfo() и loop, чтобы найти хороший результат, но таким образом даже она не может привязаться.

int tcp_connect(char *server, int port)
 {
    /*
    struct addrinfo hints, *servinfo , *p;
    int sockfd;
    int rv;
    int yes = 1;
    
    memset(&hints, 0, sizeof hints);
    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;

    if ((rv = getaddrinfo("messenger.hotmail.geo.msnmessenger.msn.com.akadns.net", "4000", &hints, &servinfo)) != 0) {
            fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
            return 1;
    }

    // loop through all the results and bind to the first we can
    for(p = servinfo; p != NULL; p = p->ai_next) {
            if ((sockfd = socket(p->ai_family, p->ai_socktype,
                            p->ai_protocol)) == -1) {
                    perror("server: socket");
                    continue;
            }

            if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes,
                            sizeof(int)) == -1) {
                    perror("setsockopt");
                    exit(1);
            }

            if (bind(sockfd, p->ai_addr, p->ai_addrlen) == -1) {
                    close(sockfd);
                    perror("server: bind");
                    continue;
            }
            
            if (connect(sockfd, p->ai_addr, p->ai_addrlen) == -1) {
                close(sockfd);
                perror("client: connect");
                continue;
            }

            break;
    }

    freeaddrinfo(servinfo); // all done with this structure

    if (p == NULL)  {
            fprintf(stderr, "server: failed to bind\n");
            exit(1);
    }
    
    return sockfd;
    */    
        
        
        
    
    
        struct sockaddr_in localAddr, servAddr; // Used in connect and bind
        struct hostent *h; // Used for address resolving
        int rc; // Function return code
        int sd; // The socket descriptor

        //Resolve the address
        h = gethostbyname(server);
        if(h==NULL)
                return -1;

        servAddr.sin_family = h->h_addrtype;
        memcpy((char *) &servAddr.sin_addr.s_addr, h->h_addr_list[0], h->h_length);
        servAddr.sin_port = htons(port);

        //Initialize the socket
        sd = socket(AF_INET, SOCK_STREAM, 0);
        if(sd<0)
                return -1;

        localAddr.sin_family = AF_INET;
        localAddr.sin_addr.s_addr = htonl(INADDR_ANY);
        localAddr.sin_port = htons(0);

        //Bind a local port for recieving data 
        rc = bind(sd, (struct sockaddr *) &localAddr, sizeof(localAddr));
        if(rc<0)
                return -1;

        //Connect to the remote server
        rc = connect(sd, (struct sockaddr *) &servAddr, sizeof(servAddr));
        if(rc<0)
                return -1;

        return sd;
}

1 Ответов

Рейтинг:
1

Richard MacCutchan

Проблема заключается в удаленном сайте и его доступности. Это не проблема кодирования. Попробуй https://www.messenger.com/[^].


Member 13606974

соединение отказано в части connect ().

Richard MacCutchan

Ну, как я уже сказал, это проблема с сервером, который не принимает ваш запрос на подключение. Вы не можете решить эту проблему без помощи администраторов удаленного сайта.

Member 13606974

но есть ли в любом случае, чтобы изменить эти части на telnet, или я не знаю, каким образом мой собственный компьютер будет хостом? (я не слишком много знаю о гнезде и только недавно руководство Beej по )

Richard MacCutchan

Здесь нечего менять. Если удаленный сервер не примет ваше соединение, то вы ничего не сможете сделать. Как я уже сказал, Вы должны обратиться за помощью к владельцам сайта.

Member 13606974

хорошо, спасибо