![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Две сетевые карты [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