На событие OnShow формы, где располагаются компонеты для работы с протоколом(например, UDP с вклади Indy) пишешь:| Код |
procedure TForm1.FormShow(Sender: TObject); begin IdUDPClient1.Host:=255.255.255.255;{т.е. все адреса} IdUDPClient1.Send('e'+getip+' '+nick) end;
|
, где 'e'(например, но может быть и другой) - условный индекс входа в чат getip - функция получения Ip-ишника nick - ник, вводимый в предыдущем окне, например. Функция getip:
| Код | Function TForm1.getip:string; type TaPInAddr = Array[0..10] of PInAddr; PaPInAddr = ^TaPInAddr; var phe: PHostEnt; pptr: PaPInAddr; Buffer: Array[0..63] of Char; GInitData: TWSAData; begin WSAStartup($101, GInitData); GetHostName(Buffer, SizeOf(Buffer)); phe := GetHostByName(buffer); if phe = nil then Exit; pPtr := PaPInAddr(phe^.h_addr_list); result:=inet_ntoa(pptr^[0]^); WSACleanup end;
|
После этого надо считать сообщение. Делается это так:
| Код | procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle); var St: TStringStream; ipishnik,remotenick: String; begin St := TStringStream.Create(''); St.CopyFrom(AData, AData.Size); if St.DataString[1]='e' then begin ipishnik:=strtoint(copy(st.DataString,2,pos(' ',st.DataString)-2)); remotenick:=copy(St.DataString,pos(' ',st.DataString)+1,length(St.DataString)) end; st.free end;
|
В ipishnik - хранится Ip-ишник, а remoteniсk - ник вошедшего пользователя. И незабудь в общем uses'е прописать winsock! Ферштейн? |