Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > не читаются данные


Автор: worsvch 21.4.2012, 13:18
Запускаю программу, при этом на консоль ничего не выходит и программа не завершается и ошибок никаких. 80 порт открыт на 100%, можно любой другой порт, это неважно. Коннект проходит, проверяли на другом компе с помощью netstat -an. Подскажите, в чем может быть ошибка?
Код

#include "stdafx.h"
#include <clocale>
#include <cstring>
#include <winsock2.h>
#include <iostream>

#pragma comment(lib,"ws2_32.lib")

using namespace std;

void error(char* text) {
        cout << "Error: " << text << endl;
        exit(1);
}

int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"");
    
    WSAData wsa;
    SOCKET sc;
    struct sockaddr_in peer;
    int s = 0;
    int s1 = 0;
    int rc = 0;
    char buf[100] = {'\0'};

    WSAStartup(MAKEWORD(2,2),&wsa);
    peer.sin_family = AF_INET;
    peer.sin_port = htons(80);
    peer.sin_addr.S_un.S_addr = inet_addr("xx.xx.xx.xx");
    
    sc = socket(AF_INET,SOCK_STREAM,0);
    if (s == INVALID_SOCKET) error("socket");    

    rc = connect(sc,(sockaddr*)&peer,sizeof(peer));

    rc = recv(sc,buf,sizeof(buf),0);
    if (SOCKET_ERROR) cout << "Error: " << WSAGetLastError() << endl;
    cout << buf << endl;
    
    closesocket(sc);
    WSACleanup();

    return 0;
}

Автор: boostcoder 21.4.2012, 13:27
Цитата(worsvch @  21.4.2012,  13:18 Найти цитируемый пост)
rc = connect(sc,(sockaddr*)&peer,sizeof(peer));

после этой строки, добавь вывод rc и errno.
ну и показывай.

Автор: worsvch 21.4.2012, 13:43
Цитата(boostcoder @ 21.4.2012,  13:27)
Цитата(worsvch @  21.4.2012,  13:18 Найти цитируемый пост)
rc = connect(sc,(sockaddr*)&peer,sizeof(peer));

после этой строки, добавь вывод rc и errno.
ну и показывай.

Код

#include "stdafx.h"
#include <clocale>
#include <cstring>
#include <winsock2.h>
#include <iostream>

#pragma comment(lib,"ws2_32.lib")

using namespace std;

void error(char* text) {
        cout << "Error: " << text << endl;
        exit(1);
}

int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"");
    
    WSAData wsa;
    SOCKET sc;
    struct sockaddr_in peer;
    int s = 0;
    int s1 = 0;
    int rc = 0;
    char buf[100] = {'\0'};

    WSAStartup(MAKEWORD(2,2),&wsa);
    peer.sin_family = AF_INET;
    peer.sin_port = htons(80);
    peer.sin_addr.S_un.S_addr = inet_addr("xx.xx.xx.xx");
    
    sc = socket(AF_INET,SOCK_STREAM,0);
    if (s == INVALID_SOCKET) error("socket");    

    rc = connect(sc,(sockaddr*)&peer,sizeof(peer));
    //if (rc != 0) error("connect");
    cout << "rc = " << rc << endl;
    cout << "errno = " << errno << endl;

    rc = recv(sc,buf,sizeof(buf),0);
    if (rc == -1) cout << "Error: " << WSAGetLastError() << endl;    
    cout << "Buffer: " << buf << endl;
    
    closesocket(sc);
    WSACleanup();

    return 0;
}

Результат:
rc = 0
errno = 0

Автор: feodorv 21.4.2012, 14:35
Цитата(worsvch @  21.4.2012,  14:18 Найти цитируемый пост)
Подскажите, в чем может быть ошибка?

Здесь:
Цитата(worsvch @  21.4.2012,  14:18 Найти цитируемый пост)
rc = recv(sc,buf,sizeof(buf),0);

Чтобы что-нибудь получить, надо что-нибудь послать. И послать нужно HTTP-запрос  smile 

Автор: worsvch 21.4.2012, 15:09
Цитата(feodorv @ 21.4.2012,  14:35)
Цитата(worsvch @  21.4.2012,  14:18 Найти цитируемый пост)
Подскажите, в чем может быть ошибка?

Здесь:
Цитата(worsvch @  21.4.2012,  14:18 Найти цитируемый пост)
rc = recv(sc,buf,sizeof(buf),0);

Чтобы что-нибудь получить, надо что-нибудь послать. И послать нужно HTTP-запрос  smile

Спасибо, все получилось smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)