Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение Бинарного Кода из Файла 
:(
    Опции темы
tht
Дата 7.2.2007, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 10.5.2006

Репутация: нет
Всего: 1



Код

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[]){
    WSADATA wsaData;
    SOCKET SocketHandle, SocketServer;
    int socklen, recv_count, i;
    char rcvBuff[1025] = {0}, cmd;
    int intBuff[1025] = {0};
    FILE* fh;
    //fstream fr;
    sockaddr_in saddr_in, cl_addr;

    if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0){
        printf("Error startup %i\n",WSAGetLastError());
    }
    SocketHandle = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    if(SocketHandle == INVALID_SOCKET){
        printf("Error Socket %i\n",WSAGetLastError());
    }

    printf("Enter S or C\n");
    cmd = getch();

    if(cmd == 's'){
        fh = fopen("server_send.txt","rb");
        fread(&intBuff,8,1,fh);
        fclose(fh);

        rcvBuff

        memcpy(&rcvBuff,&intBuff,8);
        printf("%i\n");
        printf("%s\n",&intBuff);

        saddr_in.sin_addr.s_addr = inet_addr("10.10.0.50");
        saddr_in.sin_family = AF_INET;
        saddr_in.sin_port = htons(14759); //14759, 35920

        if(bind(SocketHandle,(SOCKADDR*)&saddr_in,sizeof(saddr_in)) == SOCKET_ERROR){
            printf("Error Bind %i\n",WSAGetLastError());
        }
        if(listen(SocketHandle,1024) == SOCKET_ERROR){
            printf("Error Listen %i\n",WSAGetLastError());
        }
        SocketServer = SOCKET_ERROR;
        while(SocketServer == SOCKET_ERROR ){
            SocketServer = accept(SocketHandle,NULL,NULL);
        }
        send(SocketHandle,rcvBuff,2,0);
        memset(&rcvBuff,0,1024);
        recv_count = recv(SocketHandle,rcvBuff,1024,0);
        printf("%i BYTES RECIVE. %s\n",recv_count,rcvBuff);
        closesocket(SocketServer);
    }

    if(cmd == 'c'){
        saddr_in.sin_addr.s_addr = inet_addr("10.10.0.3");
        saddr_in.sin_family = AF_INET;
        saddr_in.sin_port = htons(14759); //14759, 35920

        connect(SocketHandle,(SOCKADDR*)&saddr_in,sizeof(saddr_in));
        recv_count = recv(SocketHandle,(char*)rcvBuff,1024,0);
        fh = fopen("server_send.txt","w+b");
        printf("%i BYTES. %s\n",recv_count,rcvBuff);
        fwrite(&rcvBuff,recv_count,1,fh);
        fclose(fh);
    }

    closesocket(SocketHandle);
    WSACleanup();
    printf("\npress any key\n");
    getch();
    return 0;
}

PM MAIL   Вверх
vinter
Дата 7.2.2007, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Код

int nVariable = 0;
while(!feof(file))
{
   fscanf(file, "%d", &nVariable);
   printf("%d", nVariable)
} 

и фсе

Это сообщение отредактировал(а) vinter - 7.2.2007, 18:42


--------------------
Мой блог
PM MAIL WWW   Вверх
SerpentVV
Дата 7.2.2007, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 27.11.2006
Где: Астрахань

Репутация: 1
Всего: 1



Сделай вот так:

char buf[1000] ={0};
//...
int num = fread(buf, sizeof(char), 8, file);

В num получишь реально прочитанное количество байтов
Советую читать в байтовый массив, а не в интовский...

PM MAIL   Вверх
tht
Дата 7.2.2007, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 10.5.2006

Репутация: нет
Всего: 1



vinter попробывал. вылетает ошибка программы.
SerpentVV результат тот же самый что и был у меня... т.е. 2 байта.
PM MAIL   Вверх
vinter
Дата 7.2.2007, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



tht, покажи как ты сделал с моим кодом
Цитата
вылетает ошибка программы.

привыкни приводить полность ошибку, а не "у меня ошибка.."


--------------------
Мой блог
PM MAIL WWW   Вверх
tht
Дата 7.2.2007, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 10.5.2006

Репутация: нет
Всего: 1



короче я наконец то вас всех понял... и сделал так
Код

        fh = fopen("server_send.txt","rb");
        while(!feof(fh)){
            ch = fgetc(fh);
            printf("%c",ch);
            rcvBuff[i] = ch;
        }
        fclose(fh);


странно но почему rcvBuff не выводит все данные а опять же только эти 2 байта первых ?
 в то время как из сети, от все 8 байтов сгружает нормально и нормально в полном виде выводит. это когда я как клиент подключаюсь.
PM MAIL   Вверх
SerpentVV
Дата 8.2.2007, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 27.11.2006
Где: Астрахань

Репутация: 1
Всего: 1



Цитата(tht @ 7.2.2007,  19:12)
короче я наконец то вас всех понял... и сделал так
Код

        fh = fopen("server_send.txt","rb");
        while(!feof(fh)){
            ch = fgetc(fh);
            printf("%c",ch);
            rcvBuff[i] = ch;
        }
        fclose(fh);


странно но почему rcvBuff не выводит все данные а опять же только эти 2 байта первых ?
 в то время как из сети, от все 8 байтов сгружает нормально и нормально в полном виде выводит. это когда я как клиент подключаюсь.

Потому что выводить нужно вот так:
Код

            printf("%i", static_cast<int>(ch));

То есть ты выведешь символ как ЦЕЛОЕ... Ноль как символ не выводится...


Это сообщение отредактировал(а) SerpentVV - 8.2.2007, 15:19
PM MAIL   Вверх
tht
Дата 8.2.2007, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 10.5.2006

Репутация: нет
Всего: 1



а вот и НЕТ. выводиться
printf("%c",ch); - это выводит все до последнего байта включая НУЛИ. просто на экране символов 0x00 не видно так как они ничего не значат, точнее говоря это выглядит так будто там пробелы вывелись.
 а я cпросил про переменную rcvBuff, пытаюсь вывести ее вс. целиком на экран printf("%s",rcvBuff); выводятся только первые два байта, до нуля.
 НО, когда я эти данные, 8 байтов, получаю из сети в эту переменную и вывожу printf("%s",rcvBuff); на экран всё выводится нормально, все 8 байтов. т.е. даже НУЛИ, которые на экране похожи на пробелы, так как их не видно.
 только в одном случае не выводятся, в том когда я загружаю эти же данные из ФАЙЛА.
PM MAIL   Вверх
comcon1
Дата 11.2.2007, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 12
Всего: 17



кароче
Код

struct simplstr {
 char buf[500];
 int len;
}

читай в такие структы. тебе правильно сказали. и len задавай исходно.


--------------------
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0622 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.