Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: Сети
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Maincore
14 / 14 / 2
Регистрация: 22.03.2012
Сообщений: 95
1

Delphi winsock отправка больших данных

25.05.2013, 17:58. Просмотров 1140. Ответов 11
Метки нет (Все метки)

Здравствуйте дорогие форумчане!!
Сразу приведу кусок кода сервера:
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
k:=0;
k:=Pos('dir',buff);
   if k<>0 then
   begin
    Path := '';
    path:=copy(buff,k+3,strlen(buff));
    path:=trim(path+'\*');
    Attr := faAnyFile;
    memo1.Lines.Add(path);
    FindFirst(path, Attr, F);
       if F.name <> '' then
       begin
        buffer_send:=F.name+''+#13#10;
        send(Msg.Sock,Pointer(buffer_send)^,Length(buffer_send),0);
        while FindNext(F) = 0 do
           begin
            buffer_send:=F.name+''+#13#10;
            send(Msg.Sock,Pointer(buffer_send)^,Length(buffer_send),0);
           end;
        end;
   end;
FindClose(F);

а кот отрывок кода из клиента:
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
............
 FD_READ:
  begin
   Buff:='';
   ioctlsocket(Sock, FIONREAD, DataLen);
      if Recv(Sock, Buff, DataLen, 0)=Socket_Error then
       memo1.Lines.Add('----------Recv failed...')
          else
           memo1.Lines.Add(buff);
  end;
.............

Клиент посылает серверу путь к папке, тот принимает данные производит поиск всех файлов в этом каталоге, далее отсылает список файлов клиенту.
Все нормально работает, вот только если список файлов большой то клиент вылетает.
В чем может быть проблема?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2013, 17:58
Ответы с готовыми решениями:

Отправка письма с аттачем на winsock
Привет всем подскажите как с помощю винсока(winsock]) отправить письмо с...

Отправка сообщений. Winsock, send и telnet
Приветствую. Пишу простенький сервер. Использую Delphi 6, winsock. Клиентом...

Delphi + WinSock
Обьясните пожалуйста как на WinSock делать пост / гет запросы на сайты, именно...

Delphi. Winsock клиент-серверное приложение
Server: unit Unit1; interface uses Windows, Messages, SysUtils,...

Delphi Winsock ProxyServer Делфи Винсок ПроксиСервер
Всем привет , вот пытаюсь сделать запрос с помощью winsock program...

11
mss
2634 / 2258 / 276
Регистрация: 24.12.2010
Сообщений: 13,725
26.05.2013, 19:11 2
Что такое Buff ?
Чему равно DataLen ?
0
Maincore
14 / 14 / 2
Регистрация: 22.03.2012
Сообщений: 95
26.05.2013, 19:44  [ТС] 3
Цитата Сообщение от mss Посмотреть сообщение
Что такое Buff ?
buff: Array[0..255] of Char;
DataLen: LongInt;
0
mss
2634 / 2258 / 276
Регистрация: 24.12.2010
Сообщений: 13,725
26.05.2013, 20:15 4
Цитата Сообщение от Maincore Посмотреть сообщение
DataLen: LongInt;
Чему равно DataLtn ?
0
Maincore
14 / 14 / 2
Регистрация: 22.03.2012
Сообщений: 95
26.05.2013, 20:20  [ТС] 5
Цитата Сообщение от mss Посмотреть сообщение
Чему равно DataLtn ?
2277
0
mss
2634 / 2258 / 276
Регистрация: 24.12.2010
Сообщений: 13,725
26.05.2013, 20:37 6
Цитата Сообщение от Maincore Посмотреть сообщение
2277
С какой радости 2277-то, если размер буфера всего 256*SizeOf(Char) байт ?
0
Maincore
14 / 14 / 2
Регистрация: 22.03.2012
Сообщений: 95
26.05.2013, 20:41  [ТС] 7
Цитата Сообщение от mss Посмотреть сообщение
С какой радости 2277-то, если размер буфера всего 256*SizeOf(Char) байт ?
то есть данные больше чем буфер?
Тогда как я понимаю надо частями отправлять но как это реализовать?
0
mss
2634 / 2258 / 276
Регистрация: 24.12.2010
Сообщений: 13,725
26.05.2013, 20:45 8
Цитата Сообщение от Maincore Посмотреть сообщение
надо частями отправлять
Отправлять ты можешь хоть частями хоть целиком, но размер буфера на стороне приемника должен быть не меньше чем указанов DataLen на момент вызова recv()
0
саша40
-111 / 293 / 47
Регистрация: 14.08.2012
Сообщений: 2,573
26.05.2013, 21:02 9
Цитата Сообщение от Maincore Посмотреть сообщение
Здравствуйте дорогие форумчане!!
Сразу приведу кусок кода сервера:
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
k:=0;
k:=Pos('dir',buff);
   if k<>0 then
   begin
    Path := '';
    path:=copy(buff,k+3,strlen(buff));
    path:=trim(path+'\*');
    Attr := faAnyFile;
    memo1.Lines.Add(path);
    FindFirst(path, Attr, F);
       if F.name <> '' then
       begin
        buffer_send:=F.name+''+#13#10;
        send(Msg.Sock,Pointer(buffer_send)^,Length(buffer_send),0);
        while FindNext(F) = 0 do
           begin
            buffer_send:=F.name+''+#13#10;
            send(Msg.Sock,Pointer(buffer_send)^,Length(buffer_send),0);
           end;
        end;
   end;
FindClose(F);

а кот отрывок кода из клиента:
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
............
 FD_READ:
  begin
   Buff:='';
   ioctlsocket(Sock, FIONREAD, DataLen);
      if Recv(Sock, Buff, DataLen, 0)=Socket_Error then
       memo1.Lines.Add('----------Recv failed...')
          else
           memo1.Lines.Add(buff);
  end;
.............

Клиент посылает серверу путь к папке, тот принимает данные производит поиск всех файлов в этом каталоге, далее отсылает список файлов клиенту.
Все нормально работает, вот только если список файлов большой то клиент вылетает.
В чем может быть проблема?
Добавте строку: Application.ProcessMessages;
Просто у вас он не вылетает, а заедает. Из-за нагрузки.
0
mss
2634 / 2258 / 276
Регистрация: 24.12.2010
Сообщений: 13,725
26.05.2013, 21:05 10
Цитата Сообщение от саша40 Посмотреть сообщение
Добавте строку: Application.ProcessMessages;
Просто у вас он не вылетает, а заедает. Из-за нагрузки.
Когда же ты наконец устанешь нести ахинею ?
0
n971030
154 / 101 / 4
Регистрация: 23.01.2010
Сообщений: 1,317
29.05.2013, 23:15 11
Цитата Сообщение от mss Посмотреть сообщение
С какой радости 2277-то, если размер буфера всего 256*SizeOf(Char) байт ?
у меня recv возращает -1 и ничего не могу сделать с delphi на api писал все работает, подскажите...
0
mss
2634 / 2258 / 276
Регистрация: 24.12.2010
Сообщений: 13,725
30.05.2013, 08:45 12
Цитата Сообщение от n971030 Посмотреть сообщение
ecv возращает -1
WSAGetLastError скажет в чем проблема
0
30.05.2013, 08:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2013, 08:45

Знаки ? при отправки данных в winsock
Вообщем отправляю данные через SendText Потом принимаю их так ...

Delphi отправка файлов
Необходимо все файлы с расширением *.exe которые находятся в папке tools на...

Delphi 2010 отправка почты
Добрый день! Народ, подскажите, как отправить письмо из Delphi 2010 (ХЕ)?? Уже...


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

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

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