Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++/CLI
Войти
Регистрация
Восстановить пароль
 
Loveb
1 / 1 / 0
Регистрация: 18.11.2010
Сообщений: 17
1

Передача файла по сети неизвестной длины

30.06.2011, 15:21. Просмотров 1002. Ответов 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
Ответы с готовыми решениями:

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

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

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

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

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

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

Считать строку неизвестной длины
Как на си считать строку неизвестной длины?

Считывание массива неизвестной длины
Имеется набор чисел. Про их количество ничего заранее неизвестно, кроме того, что оно кратно 10....

Чтение строки неизвестной длины
реализация на СИ как прочитать строку неизвестной длины? Чтение должно быть не посимвольным....


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

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

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