vad78 » 11.06.2013 11:45:50
Если смогу чем-нибудь помочь, буду рад.
Есть мало-мальский опыт в этом вопросе.
Использовал библиотеки Sockets(Для работы с сокетами) и BaseUnix(если не ошибаюсь для функции FpFcntl);
procedure perrror(const S:string);
Я объявил глобальными переменными:
var
Sock:Tsocket;
Addr:TInetSockAddr;
buf: Tbuf;
begin
WriteLn(S,socketerror);
halt(100); //Эту строку можно не писать, не знаю может и нет необходимости в ней
end;
Sock:=fpsocket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); //Открываем сокет (протокол UDP)
if Sock=-1 then perrror('socket: ');
FpFcntl(Sock,F_SetFl,O_NONBLOCK); // Переводим в асинхронный режим
Addr.sin_family:=AF_INET;
addr.sin_port:=htons(prt); //указываем порт и IP адрес
addr.sin_addr.s_addr:=0;
if fpbind(Sock,@Addr,SizeOf(Addr))=-1 then //Связываем адрес с сокетом
perrror('bind: ');
для отправки данных есть функция
fpsendto(Sock,@buff,SizeOf(buff),0,@addr,SizeOf(addr));
или просто (fpsend)
перед отправкой надо конкретно указать IP адрес кому
Addr.sin_port:=htons(StrToInt(Form1.port.Text));
Addr.sin_addr:=StrToNetAddr(fip); //fip - это строка '192.168.1.12'
Для приема:
fprecvfrom(Sock,@pack,SizeOf(pack),0, @from, @FromLen)
или (fprecv) параметры другие, надо смотреть в справке.
Здесь все просто, кто клиент а кто сервер на твое усмотрение.
Устанавливать соединение не требуется главное, чтоб порт у обоих был одинаков.
написал с ходу, могут быть ошибки.