Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Delphi > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 12.03.2012, 17:01   #1
Maxxxtri23
Пользователь
 
Регистрация: 04.12.2008
Сообщений: 17
По умолчанию Соединение 2х сокетов

В программе на Delphi есть ClientSocket1 и ClientSocket2. Как перенаправить данные приходяшие данные на 1 сокет во 2й на оборот. То есть должно получиться что-то вроде туннеля.
Попытаюсь объяснить на схеме:
Maxxxtri23 вне форума Ответить с цитированием
Старый 12.03.2012, 18:39   #2
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,053
По умолчанию

А если сделать наоборот? пусть сервера юзают ClientSocket а клиент ServerSocket??? разницы то ни какой по сути
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 12.03.2012, 18:43   #3
Maxxxtri23
Пользователь
 
Регистрация: 04.12.2008
Сообщений: 17
По умолчанию

Нужно именно так как на схеме
Maxxxtri23 вне форума Ответить с цитированием
Старый 12.03.2012, 18:46   #4
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,053
По умолчанию

Дело в том что ServerSocket имеет набор сокетов а клиент тока один
но можно сделать так - по событию приема пакета с первого клиентсокета хватать то что пришло и тут же отправлять вторым клиент сокетом
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 12.03.2012, 18:50   #5
Maxxxtri23
Пользователь
 
Регистрация: 04.12.2008
Сообщений: 17
По умолчанию

Да это понятно. Я думаю что тут как надо сделать чтобы данные приходящие на 1 сокет клались куда то в буфер или память и из неё пересылались уже 2м сокетом, вот только как это сделать я не знаю
Maxxxtri23 вне форума Ответить с цитированием
Старый 12.03.2012, 18:53   #6
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,053
По умолчанию

Пакеты фиксированной длинны? есть структура у пакета иль просто набор битовый? ото у меня примерно такая же загвозга получается в теме что по соседству)
там есть примерное решение - но оно критует) если проблема у меня там решится то у тебя тут тоже автоматически решится)
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 12.03.2012, 18:56   #7
Maxxxtri23
Пользователь
 
Регистрация: 04.12.2008
Сообщений: 17
По умолчанию

Нет пакеты все разные
Maxxxtri23 вне форума Ответить с цитированием
Старый 12.03.2012, 19:06   #8
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,053
По умолчанию

Может как то так получится
Код:
procedure TForm1.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var buf:TmemoryStream;
size:integer;
begin
buf:=Tmemorystream.Create;
size:= Socket.ReceiveLength;
Socket.ReceiveBuf(buf,size);
form1.Client2.Socket.SendBuf(buf,size);//тута наверное крит получишь
//возможно надо сдвинуть позицию курсора на начало buf.position:=0; но мне эт не помогло
хотя я думаю что кританет. я что то видел в одной из тем сдесь что лучше в качестве буффера глобальную переменную юзать - тока ее над наверное постоянно чистить после передачи пакета... ото будет забиваться
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 12.03.2012, 19:33   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,002
По умолчанию

в обработчике OnRead первого сокета пишем примерно это:
Код:
var buf:array of byte;
begin
 SetLength(buf,Socket.RecieveLength);
 Socket.RecieveBuf(buf[0],Length(buf));
 ClientSocket2.Socket.SendBuf(buf[0],Length(buf));
аналогичное у второго сокета.
Цитата:
хотя я думаю что кританет
кританет?
более похоже на всяких игр.

AV вылетит, ибо вы переписываете обьект, а не его данные.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 12.03.2012 в 19:36.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.03.2012, 19:53   #10
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,053
По умолчанию

О... в моем проблеме http://www.programmersforum.ru/showthread.php?t=191132 возможно это тоже поможет. спасибо большое. тогда вот вопросик такой: а как из этого массива прочитать в переменную некого типа данных
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование сокетов Anubys C/C++ Сетевое программирование 5 26.11.2011 00:33
Динамическое распределение сокетов (С#) Lightsaber Помощь студентам 1 29.09.2011 09:40
Программирование сокетов Win vadakoff C/C++ Сетевое программирование 2 14.10.2010 23:35
правильность закрытия сокетов i-cpp C/C++ Сетевое программирование 3 16.02.2010 20:13
Организация сокетов mar4elo Работа с сетью в Delphi 1 01.01.2009 17:50


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS