Помогите пожалуйста переделать код в С++. Сам начал, но возникли проблемы с IdUDPServer1.Broadcast и IdUDPServer1.Send. Все перевести конечно много,а может кому-то это и просто, но хотя бы помогите с переводом IdUDPServer1.Broadcast и IdUDPServer1.Send.
Заранее спасибо буду рад любой помощи.
Код:
procedure tform1.add(text:string; color:integer); //процедура для выведения текста в richedit1 определённого цвета
begin
richedit1.SelAttributes.Color:=color; //задать нужный цвет
richedit1.SelStart:=length(richedit1.Text); //в какои месте написать текст
richedit1.SelText:=text; //текст
richedit1.Lines.Add('');
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
//приложение запустилось...
try
IdUDPServer1.Active:=true; //сделать активным UDP сервер
except
close; //если произошла какая либо ошибка, то выйти из приложения
end;
myip:=idipwatch1.LocalIP; //узнать какой IP адрес на этом компьютере
add('['+myip+'] вошёл в чат',clgreen); //написать текст в richedit1 зелёным цветом
listbox1.Items.Add(myip); //добавить себя в список юзеров
IdUDPServer1.Broadcast(#0#1,7321); //оповестить всех сообщение о том что я вошёл в чат
timer1.Enabled:=false;
end;
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
a:string;
i:integer;
g:TStringStream;
begin
if abinding.PeerIP=myip then exit; //если это сообщение пришло с моего компьютера, то не обробатвать его дальше
// перевести TStream в String
g := TStringStream.Create('');
try
g.CopyFrom(AData, AData.Size);
a := g.DataString;
finally
g.Free;
end;
if a=#0#1 then // если юзер вошёл в чат
begin
if pos(abinding.PeerIP,listbox1.Items.Text)=0 then //если его ещё нет в списке юзеров, то добавить его в список
listbox1.Items.Add(abinding.PeerIP); //abinding.PeerIP - узнать его IP адрес
add('['+abinding.PeerIP+'] вошёл в чат',clgreen);
IdUDPServer1.Send(abinding.PeerIP,7321,#0#2); //оповестить нового юзера о том что мы тут уже есть
end;
if a=#0#2 then // если пришло оповещение от юзеров которые уже в чате
begin
listbox1.Items.Add(abinding.PeerIP);
end;
if pos(#0#3,a) = 1 then //если юзер прислал сообщение
begin
delete(a,1,2); //удалить из строки два сивола: #0 и #3
add('<'+abinding.PeerIP+'>: '+a,clblue); //написать сообщение в richedit1 синим цветом
end;
if a=#0#4 then //если юзер вышел из чата
begin
for i := 0 to listbox1.Items.Count-1 do //найти строку в listbox1 на которой записан IP юзера
if listbox1.Items.Strings[i] = abinding.PeerIP then // если это та строка, то
listbox1.Items.Delete(i); // удалить эту строку
add('['+abinding.PeerIP+'] вышел из чата',clgreen);
end;
if pos(#0#5,a) = 1 then //если юзер прислал личное сообщение
begin
delete(a,1,2); //удалить из строки два сивола: #0 и #5
add('Личное сообщение от <'+abinding.PeerIP+'>: '+a,clred); //написать личное сообщение в richedit1 красным цветом
end;
end;
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
var lt : TSYSTEMTIME;
begin
GetLocalTime(lt);
if key=#13 then //если нажали enter
begin
add('('+ IntToStr(lt.wHour) + ':' + IntToStr(lt.wMinute) + ':' + IntToStr(lt.wSecond)+')' +'<'+myip+'>: '+memo1.Text,clsilver);
IdUDPServer1.Broadcast(#0#3+memo1.Text,7321); // отправляю всем своё сообщение
memo1.Text:='';
key:=#0; // этот код нужен чтобы при нажатии на enter, приложение не пумкало
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
IdUDPServer1.Broadcast(#0#4,7321); //оповестить всех о том что я вышел из приложения
end;
procedure TForm1.PopupMenu1Popup(Sender: TObject);
var
ip:string;
begin
if listbox1.ItemIndex=-1 then //если ничего не выделно, то
begin
n1.Caption:='Отправить сообщение для';
n1.Enabled:=false;
exit; //выйти из процедуры
end;
n1.Enabled:=true;
ip:=listbox1.Items.Strings[listbox1.ItemIndex]; //узнать кто сейчас выделен в списке
n1.Caption:='Отправить сообщение для '+ip //изменить название кнопки
end;
procedure TForm1.N1Click(Sender: TObject);
var
ip:string;
begin
//получить IP выделеного юзера из название кнопки
ip:=n1.Caption;
delete(ip,1,24);
s1.Send(ip,7321,#0#5+memo1.Text); //отправить сообщение на определёный IP адрес
add('Личное для <'+ip+'>: '+memo1.Text,clsilver);
memo1.Text:='';
end;
end.