В избранное    Домой   

Суббота,  20 Apr 2024 г., 13:08
Блаженны алчущие и жаждующие правды, ибо они насытятся. Блаженны милостивые, ибо они помилованы будут. /Евангелие от Матфея/

 Логин:  

 Пароль: 




Анонсы:
=== Дата: 28/05/2011     Автор: --- ===

Socket

Что вам необходимо для подключения...

Ну вопервых ИП-адрес того компьютера к которуму вы хотите подключится.

Во вторых порт приложения с которым вы хотите общаться.

Дальше вам нужно создать Socket.

Socket это розетка, для подключения к различным протоколам. Вообще говоря, это все можно сделать и стандартными компонентами, не вдаваясь в подробности программирования. Но это для слабаков, для юзеров и ламеров... Ведь вы не такой? Ведь при виде ваших программ бледнеют юзеры, слетают сервера и трясутся горы... И вы должны писать такие программы чтобы даже сишники с полуторамегабайтовыми MFC библиотеками содрогнулись при виде 30 килобайтного клиента или 20 килобайтного сервера нестандартного IWCP (internet women chat protocol) порта :-)

Все необходимое для работы с WinSock находится в модуле Winsock.

Итак, создание сокета... объяснять работу тех или иных АПИ функций я не буду, они есть в хелпе...

function socketcreate:integer;
var
d:TWSAData;
begin
//инициализирую WinSock версии 0101.
     wsastartup($0101,d);
     result:=socket(AF_INET, SOCK_STREAM,0);
end;

Теперь нам нужно подключится к хосту, нетак-ли?
H-строка с именем хоста(www.chat.ru например)
P-порт сервиса
а S-сокет созданный ранее.

procedure connecttohost(h:string;p:word;s:integer);
var
r_h:PHostEnt;
rh:THostEnt;
al:PChar;
sa:TSockaddrin;
begin
     r_h:=nil;
     r_h:=gethostbyname(pchar(edit1.text));
	if r_h=nil then exit;
     if r_h<>nil then rh:=r_h^;
     al:=rh.h_addr_list^;
     zeromemory(@sa,sizeof(sa));
     copymemory(@sa.sin_addr,al,rh.h_length);
     sa.sin_family:=af_inet;
     sa.sin_port:=p;
     connect(nsd,sa,j);
end;

Теперь нужно послать информацию хосту D-строка для передачи, при необходимости переделать под любой дугой тип. S-ранее созданный сокет.

procedure sendingdata(d:string;s:integer);
begin
     send(s,d,length(d),msg_oob);
end;

Ну, и принять ответ D-строка для приeма, обязаня иметь длинну.
Например 1000 пробелов :-).
S-ранее созданный сокет.

procedure receivingdata(var d:string;s:integer);
begin
     recv(s,d,length(d),0);
end;

"


<<назад

Погода в Рудне
(Волгоградcкая обл.)

Подробнее >>


Курс валют
на 20 Апр 2024 г.
704 - Вьетнамских донгов
- 1