Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
0 / 0 / 1
Регистрация: 24.05.2015
Сообщений: 4
1

Получение данных через сокет, используя Synapse

24.05.2015, 18:33. Показов 3669. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.
Я пишу небольшой прокси на free pascal, используя synapse. Возникла проблемма следующего плана:
В коде после установки соединения и авторизации клиента работает следующий участок кода:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//получаем данные от клинта
rec_packet:=Self.ConnectionSocket.RecvPacket(120000);
str_stream:=TStringStream.Create(rec_packet);
 
//отправляем данные в интернет        
tcp.SendStreamRaw(str_stream);
str_stream.Destroy(); str_stream:=nil;
                
//получаем ответ из интернета
rec_packet:=tcp.RecvPacket(120000);
sleep(100); //вот без этого данные приходят не полностью, если их много!!!
 
//отправляем ответ клиенту
str_stream:=TStringStream.Create(rec_packet);
Self.ConnectionSocket.SendStreamRaw(str_stream);
str_stream.Destroy(); str_stream:=nil;
Вот почему после rec_packet:=tcp.RecvPacket(120000); нужно немного подождать sleep(100); чтобы получить данные полностью?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2015, 18:33
Ответы с готовыми решениями:

Получение данных через сокет
Всем привет! Допускаю, что у меня очень глупый вопрос, но я не понимаю в чем дело. Проблема...

Подключение к FTP через прокси используя Synapse/WinInet
Synapse может стандартно использовать прокси для HTTP, но почему то не может для FTP. Странно....

Передача данных через сокет
Подскажите пожалуйста. Может быть кто-то разбирался с этим: как лучше всего передавать данные...

Отправка данных через сокет
Речь идёт о сетевом сокете. (QTcpSocket) Значит пишу я на клиенте данные в сокет маленькими...

10
0 / 0 / 1
Регистрация: 24.05.2015
Сообщений: 4
25.05.2015, 19:09  [ТС] 2
Вообщем на другом форуме мне вкраце пояснили, но всеравно не ясно:
Pascal
1
2
3
4
5
6
7
8
//вешаем обрботчик на прием данных из интеренета
Self.tcp.OnReadFilter:=@Self.OnReadFilterTCP;
//вешаем обработчик на прием от клиента
Self.ConnectionSocket.OnReadFilter:=@Self.OnReadFilterClient;
//ждем данные из интернета
Self.tcp.RecvPacket(120000);
//ждем данные от клиента
Self.ConnectionSocket.RecvPacket(120000);
Собственно обработчики
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
procedure CProxyThread.OnReadFilterTCP(Sender: TObject; var Value: AnsiString);
var str_stream:TStringStream;
    sock:TTCPBlockSocket;
begin
  //пришли данные из интернета
  str_stream:=TStringStream.Create(Value);
  //Отправляем их клиенту
  Self.ConnectionSocket.SendStreamRaw(str_stream);
  //ждем новых данных
  sock:=TTCPBlockSocket(Sender);
  sock.RecvPacket(120000);
end;
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
procedure CProxyThread.OnReadFilterClient(Sender: TObject; var Value: AnsiString);
var str_stream:TStringStream;
    sock:TTCPBlockSocket;
begin
  //пришли данные от клиента
  str_stream:=TStringStream.Create(Value);
  //шлем их в интернет
  Self.tcp.SendStreamRaw(str_stream);
  //ждем новых данных
  sock:=TTCPBlockSocket(Sender);
  sock.RecvPacket(120000);
end;
И... не работает. Подключаюсь браузером через свой прокси используя proxychains, в браузере пишет Соединение... и все. При этом если в procedure CProxyThread.OnReadFilterClient(Sender: TObject; var Value: AnsiString); убрать

Pascal
1
2
3
//ждем новых данных
  sock:=TTCPBlockSocket(Sender);
  sock.RecvPacket(120000);
то в принципе все так же, но после того как вырубаю свой прокси браузер кое что да отобразит.
Что не так? Не доходит
0
0 / 0 / 1
Регистрация: 24.05.2015
Сообщений: 4
01.06.2015, 17:34  [ТС] 3
неужели невыполнимо?

Добавлено через 22 часа 49 минут
всем спасибо, решено
0
0 / 0 / 0
Регистрация: 03.09.2023
Сообщений: 51
09.09.2023, 01:14 4
Приветствую !!!
установил пакет Synapse , а где он в палитре компонентов найти не могу ! подскажите? или он там этот пакет не должен появится
0
173 / 23 / 7
Регистрация: 14.04.2019
Сообщений: 181
09.09.2023, 10:19 5
Stels-2034, там не визуальных компонент, соответственно, и в палитре его нет. Достаточно включить его в проект в зависимости и в uses
0
0 / 0 / 0
Регистрация: 03.09.2023
Сообщений: 51
09.09.2023, 10:22 6
DedFriend, Друг что там надо написать в uses ?, мне очень сокеты нужны в Lazarus
0
173 / 23 / 7
Регистрация: 14.04.2019
Сообщений: 181
09.09.2023, 10:23 7
Futurama, не совсем по теме, но непонятно, зачем вы всюду self лепите? Уверен, что в большинстве случаев только текст засоряете.
0
0 / 0 / 0
Регистрация: 03.09.2023
Сообщений: 51
09.09.2023, 16:53 8
DedFriend, как это сделать?
0
Модератор
9871 / 5239 / 3306
Регистрация: 17.08.2012
Сообщений: 16,007
09.09.2023, 20:45 9
DedFriend, участник форума futurama в последний раз был(а) на форуме 19.06.2015 13:12. Сомневаюсь, что он(а) Вам ответит.
0
Джоуи
1081 / 643 / 240
Регистрация: 05.05.2015
Сообщений: 3,559
Записей в блоге: 2
28.10.2023, 01:02 10
Stels-2023, А какая задача?
uses
Classes, SysUtils, synsock, synautil;
1
0 / 0 / 0
Регистрация: 03.09.2023
Сообщений: 51
30.10.2023, 22:10 11
Joey, да хочу скачивать текстовый файл который только появится (в смысле новый файл) или изменится из директории (только новый или измененный) и передавать его на удаленный пк в локальной сети с интервалом в 2 минуты чтоб такая проверка была и если условия для выполнения есть то как бы чтоб это все происходило, но сейчас даже задумался может indy использовать и вообще может просто bat файлом обойтись
0
30.10.2023, 22:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.10.2023, 22:10
Помогаю со студенческими работами здесь

Отправка данных через сокет в цикле
Хочу передать синусойду через сокет на другой компьютер, передаю уже посчитаные x и y а на приеме...

Соединение данных при отправке через сокет
Доброго времени суток. Сейчас возникла непредвиденная проблема, сокет начал отправлять сообщения...

Отправка большого количества данных через сокет
Есть вектор, содержащий в себе QString с названиями текущих запущенных процессов. Необходимо...

Synapse | Получение ответа от сервера
Добрый день. Отправляю пост запрос на сервер, записываю ответ в текстовый документ - всё отлично,...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru