Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++/CLI

Войти
Регистрация
Восстановить пароль
 
Loveb
1 / 1 / 0
Регистрация: 18.11.2010
Сообщений: 17
#1

Передача файла по сети неизвестной длины - C++/CLI

30.06.2011, 15:21. Просмотров 994. Ответов 0
Метки нет (Все метки)

Пытаюсь передать файл по сети клиент серверное приложение.
Нету возможности сперва передавать размер принимаемого файла.
Передача:
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
void CclientDlg::OnBnClickedButton1()
{   
    int BytesRead;
    int file_size;
    
     
    FILE *pFile = fopen("C:\\1.txt", "rb");
    long nFileLen = 0;
    if (pFile)
    {
        fseek (pFile, 0, SEEK_END);
        nFileLen = ftell(pFile);
        fclose (pFile);
    }
    file_size = nFileLen;
    array<Byte>^Buffer = gcnew array<Byte>(file_size);
    String ^ file_name = "C:\\1.txt";
    FileStream ^ stream = File::OpenRead(file_name);
 
    BytesRead = stream->Read( Buffer, 0, file_size);
    stream->Close();
    
    Byte * Buffer_1;
    Buffer_1 =new Byte[BytesRead];
 
    for (int a=0; a<BytesRead; a++ )
    {
    Buffer_1[a] = Buffer[a];
    }
 
    m_pConnectSocket.Send(Buffer_1, BytesRead, 0); 
        
    delete [] Buffer_1;    
}
Карявая, но, к сожалению, по-человечески не получается. (если кто подскажет как сделать ровнее, буду очень признателен)

Прием:
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
void CserverDlg::OnReceive()
{
int file_size;
file_size = 36000;
int nRead=1;
 
    array<Byte>^Buffer = gcnew array<Byte>(file_size); 
    String ^ file_name = "C:\\2.txt";
    FileStream ^ stream = File::OpenWrite(file_name);
 
    Byte * Buffer_1;
    Buffer_1 =new Byte[file_size];
 
while(nRead !=0)
{
    nRead = m_pConnectSocket.Receive(Buffer_1, file_size, 0);   
    switch (nRead)
    {
        case 0:
            stream->Close();
            break;
        case SOCKET_ERROR:
            if (GetLastError() != WSAEWOULDBLOCK) 
            {
                AfxMessageBox (_T("Error occurred"));
                stream->Close();
            }
        break;
        default:
            for (int a=0; a<nRead; a++ )
            {
                Buffer[a] = Buffer_1[a];
            }
            stream->Write( Buffer, 0, nRead);
    }   
}   
delete [] Buffer;
stream->Close();
}
проблема такая. nRead в строке nRead = m_pConnectSocket.Receive(Buffer_1, file_size, 0);
никогда не становится нулем, а просто зависает ожидая приема. Если искусственно закрыть программу, то передаваемый файл отлично сохраняется. Как исправить эту ситуацию??
m_pConnectSocket принадлежит class CMySocket : public CSocket
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2011, 15:21
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Передача файла по сети неизвестной длины (C++/CLI):

функция с аргументом из массива неизвестной длины - C++/CLI
Привет. Кажется я уже делал такое и всё работало, но сейчас ни файлов не нашел, ни в интернете 0_о, может утро так действет, но вопрос...

Передача объектов по сети - .NET
В VB.NET появились такие понятия как сериализация (запись объекта в поток данных) и десериализация (обратный процесс). Если я правильно...

Передача данных по сети - .NET
Подскажите, каким образом нужно организовывать широковещательную передачу данных. У меня задача - транляция видеопотока на несколько машин...

Передача переменных в локальной сети - .NET
Требуется по локальной сети передать из одной программы передать в другую содержимое captureBox. Программы запущены на разных машинах. ...

Чтение из файла с пропуском комментария неизвестной длины - C++
Всем привет. Подскажите, пожалуйста, можно ли как-то при чтении файла пропустить комментарий неизвестной длины и считать только числа? ...

Сортировка массива неизвестной длины - 2 - Free Pascal
Здравствуйте,помогите пожалуйста написать программу. Напишите программу, которая сортирует массив ненулевых целых чисел в порядке...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2011, 15:21
Привет! Вот еще темы с ответами:

Реверс массива неизвестной длины - Pascal
Здравствуйте,помогите пожалуйста написать программу.Напишите программу, которая выполняет реверс массива целых чисел, то есть переставляет...

Массив символов неизвестной длины - C++
Добрый утро/день/вечер. Дело такое: вводится строка состоящая из слов и чисел(целых), разделяют все это безобразие разнообразные символы:...

Ввод массива неизвестной длины - C++
Добрый день! Уважаемые знатоки, вопрос скорее всего тривиальный, но тем не менее решения у меня нет. Нужно задать вектор через пробелы...

Ввод строки неизвестной длины - C (СИ)
Собственно на вход подается строка неизвестной длины, ввод которой оканчивается переходом на новую строку. Знаю, что есть функция fgets,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru