Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Две сетевые карты [D7, WinXP]


Ozone ©   (2004-05-09 09:04:00) 

Вообщем, на компьютере стоят 2 сетевые карточки с разными IP соответственно.
Как сделать так, чтобы один клиент установленный на этой машине подключался к серверу под одним IP, а другой клиент под другим?

Возможно ли это вообще?

Зпасибо за любую помощь.


Ozone   (2004-05-11 11:28:00) [1]

Всем спасибо. Во всем разобрался.


Ozone   (2004-05-11 11:28:00) [2]

-=Rezya=-  

Спасибо.


-=Rezya=-   (2004-05-11 11:20:00) [3]


> на какой адрес пытаемся подключиться?

??????????


Ozone   (2004-05-11 11:15:00) [4]

-=Rezya=-   (09.05.04 11:25) [4]

Что-то мне не совсем ястно (по коду), на какой адрес пытаемся подключиться?


Ozone   (2004-05-11 10:47:00) [5]

-=Rezya=-   (11.05.04 10:38) [9]

Просто дело в том, что в программе я использую Indy, и переходить на что-то "новое" не хотелось бы.

ЗЫ: да и к тому же я с WinSock'ом никогда не работал ... :-(


-=Rezya=-   (2004-05-11 10:38:00) [6]

А чем тебя Работа с WinSock не устраивает?


Ozone   (2004-05-11 10:31:00) [7]

Мастера, подскажите, что за Bindings, которые используются в Indy?


Ozone   (2004-05-09 11:46:00) [8]

Mentat   (09.05.04 11:19) [3]

Ничего подобного не нашел...
Можешь сказать как компонент назывется?


Ozone   (2004-05-09 11:40:00) [9]

Спасибо, попробую заюзать.


-=Rezya=-   (2004-05-09 11:29:00) [10]

Ой не большая поправка
в строчке
Sock:=Socket(Pf_Inet,SOCK_RAW,IPPROTO_IP);
SOCK_RAW, для твоих целей, надо поменять на SOCK_STREAM.


-=Rezya=-   (2004-05-09 11:25:00) [11]

Это и есть Windows. Т.е. Socket-ы используются как в Unix так и Windows. При помощи библиотеки Winsock. Вот пример элементарного  Bind-а.

Uses winsock,......;//или winsock2 его можно скачать отсюда http://home.earthlink.net/~akonshin/files/winsock2.zip
var
SAData:TWSAData;
Sock:TSocket;
Addr:sockaddr_in;
ApAddres:string;
.........
begin
WSAStartup(MAKEWORD(2,2), SAData);
Sock:=Socket(Pf_Inet,SOCK_RAW,IPPROTO_IP);
If Sock=Invalid_Socket then begin Showmessage('error-'+inttostr(wsagetlasterror)); exit; end;

Addr.sin_family :=AF_INET;
Addr.sin_port:=htons(Any_port);//Тот порт что тебе нужен
Addr.sin_addr.s_addr :=inet_addr(PChar(ApAddres));//ip адрес тот который ты хочешь забиндить

if bind(Sock, @Addr, SizeOf(Addr)) <> 0 then begin showmessage('error-'+inttostr(wsagetlasterror); exit; end;


Mentat   (2004-05-09 11:19:00) [12]

Смотри на Indy компоненты. Там есть Bindings - они отвечают за это.


Ozone   (2004-05-09 09:58:00) [13]

-=Rezya=-   (09.05.04 09:36) [1]

Мне бы Windows ... :-(


-=Rezya=-   (2004-05-09 09:36:00) [14]

Да возможно. Так как в Unix возможно формирование соединителя без IP-адресов, а для практической работы они нужны, имеется оператор bind, который позволяет присвоить определенный адрес заданному соединителю:

r=bind(s, const struct socketaddr far*name, int namelen),

где s - целочисленный код дескриптора, параметр name (идентификатор локального адреса) обычно (для Интернет) содержит три величины: IP-адрес ЭВМ, код протокольного набора, номер порта, который определяет характер приложения

Цитата из http://book.itep.ru/7/sock_71.htm


Наверх

Титульная страница Поиск, карта сайта Написать письмо