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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прием файлов, WinSock TCP 
:(
    Опции темы
hiho
Дата 10.2.2010, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Достались в наследство исходники клиент-серверного приложения. Причем клиент написан на дельфях, а сервер на С++.
Необходимо организавать передачу файлов от клиента к серверу, с условием "чтобы срочно, а то без премии останешься".
Пробовал отправять так: 
Код

    FS := TFileStream.Create('Путь к файлу',fmOpenRead);
    MainForm.Client.Socket.SendText('name' + 'Путь куда сохраняем');
    MainForm.Client.Socket.SendText('size' + IntToStr(FS.Size));
    FS.Position := 0;
    MainForm.Client.Socket.SendStream(FS);


А принимал:
Код

while ((memset(buff, 0, sizeof(buff) / sizeof(buff[0]))) && 
(bytes_recv = recv(my_sock, &buff[0], sizeof(buff), 0)) && bytes_recv != SOCKET_ERROR)
{
     if ((buff[0] == 's') && (buff[1] == 'i') && (buff[2] == 'z') && (buff[3] == 'e'))
     {
          //Получаем сведения о размере передаваемого файла
          char temp[100];
          int i;
          for(i = 4; i<=strlen(buff); i ++) temp[i-4] = buff[i];
          temp[i-4] = '\0';
          size = atoi(temp);
     } else if ((buff[0] == 'n') && (buff[1] == 'a') && (buff[2] == 'm') && (buff[3] == 'e'))
        {
             for(int i = 4; i<=100; i ++) name[i-4] = buff[i];
             File = fopen(name,"wb");//Где FILE *File объявлен ранее
        } else
           {
                fwrite(buff, bytes_recv, 1, File);
        sizeR += bytes_recv;//Переменная sizeR содержит колличество принятых байт
        if (sizeR == size) 
                        {
              fclose(File);
              MessageBox(0,"Файл принят успешно",name,0); 
        }
            }
}


При передаче файла по IP 127.0.0.1 все работает как положено, а когда выпускаю на просторы локальной или глобальной сетей постоянно пишет меньше чем положено на несколько килобайт, и соответственно происходит зависание.

Может есть у кого какие нибудь соображения как лучше передавать и принимать файлы.
PM MAIL   Вверх
SVN74
Дата 11.2.2010, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

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



CreateFile
WriteFile
ReadFile 
Можно использовать совместно с сокетом...
PM MAIL WWW   Вверх
hiho
Дата 11.2.2010, 04:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Проблему решил, немного доработав свой изначальный код.
А вот обратную передачу(от сервера - клиенту) сделал как раз с помощью "CreateFile" и  "WriteFile". Вроде все работает как надо! Спасибо!

Это сообщение отредактировал(а) hiho - 11.2.2010, 04:49
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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