|
?DELPHI????????
??? ??? ??
2002-8-5 14:32:48
--------------------------------------------------------------------------------
?????????????????????????????????????????????????????????????DELPHI???????????????????????????????????????????????????WEB???INTERNET???TCP???UDP??????????????????????????????DELPHI???TNMUDP???????UDP???????????????
1.?????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????1-1???
?1-1????????
???????????????????????????????????????????????????????????????????????????????????(HUB)???(???)?????????????????1-2???
?1-2?????????
2.????????
2.1??TNMUDP??
??????????????????DELPHI???TNMUDP???TNMUDP?????????????????????Internet?Intranet???????????????????????1-3???
??
??
??
LocalPort
??
?????????????????????????????????????
RemoteHost
??
??????????????????????????IP??????
RemotePort
??
???????????????????????????????
ReportLevel
??
?????OnStatus ????????????????
ReadBuffer
??
????UDP????????
ReadStream
??
????UDP??????
SendBuffer
??
?????????????????????????
SendStream
??
???????????
OnDataReceived
??
??????????????
OnDataSend
??
?????SendStream ?? SendBuffer?????????????????
?1-3 TNMUDP????????
2.2???????????
??????????TNMUDP???SendStream??????????????????????????????????????????????????OnDataReceived ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????1-4?????????????
?1-4??????
????????????????????????????????????????????????????????????????????
procedure TFormMain.BitBtnSentClick(Sender: TObject);
var
MyStream: TMemoryStream;
TmpStr: String;
i:Integer;
Begin
NMUDP1.ReportLevel := Status_Basic; //?????????
//??????????
case RadioGroupBm.ItemIndex of
0:
begin
NMUDP1.RemoteHost := trim(EditXx.Text); //??????
NMUDP1.RemotePort := StrToInt(trim(EditPt.Text)); //??????
TmpStr :=??; //??????
MyStream := TMemoryStream.Create;
try
MyStream.Write(TmpStr[1], Length(EditSm.Text)); //?????????
NMUDP1.SendStream(MyStream); //?????????????
finally
MyStream.Free; //???
end;
end;
1: //????
begin
for i:=0 to ListBoxXx.Count-1
do
begin
NMUDP1.RemoteHost :=ListBoxXx.Items.Strings;
NMUDP1.RemotePort := StrToInt(trim(EditMpt.Text));
TmpStr := EditSm.Text;
MyStream := TMemoryStream.Create;
try
MyStream.Write(TmpStr[1], Length(EditSm.Text));
NMUDP1.SendStream(MyStream);
finally
MyStream.Free;
end;
end;
end;
end;
end;
?1-5??????????????Timer?????Label???????MediaPlayer????Timer???OnTimer??????????
?1-5??????
OnTimer????????????
procedure TFormStart.TimerOverTimer(Sender: TObject);
begin
if strToint(FormStart.LabelOver.Caption)>0 then
begin
if FormMain.Memo1.Lines.Strings[1]<>'' then //??????????
begin
FormStart.TimerOver.Enabled:=False; MediaPlayerOver.FileName:=(ExtractFilePath(Application.ExeName)+'clock.wav');
MediaPlayerOver.Open;
MediaPlayerOver.Play;
FormTip.Show;
end
else
begin FormStart.LabelOver.Caption:=intTostr(strToint(FormStart.LabelOver.Caption)-1);
if strToint(FormStart.LabelOver.Caption)<10 then
FormStart.LabelOver.Left:=280; //?????????????
end;
end
else
begin
FormStart.TimerOver.Enabled:=False;
//????????
MediaPlayerOver.FileName:=(ExtractFilePath(Application.ExeName)+'clock.wav');
MediaPlayerOver.Open;
MediaPlayerOver.Play;
FormTip.Show;
end;
end;
?1-6 ???????????????Memo???????UDP????????????????????????MediaPlayer????????????
?1-6 ????
?????????????
procedure TFormTip.FormShow(Sender: TObject);
var msgFrom:string;
teamStr:string;
posFlag:integer;
teamNum:integer;
begin
PanelTip.Visible:=True;
PanelPro.Visible:=False;
msgFrom:=trim(FormMain.Memo1.Lines.Strings[1]);
posFlag:=Pos('*', msgFrom);
teamStr:=copy(msgFrom,posFlag-1,1);
if teamStr<>''then
begin
teamNum:=strToint(teamStr);
showmessage(teamStr+'????????') ;//??????????? MediaPlayerOk.FileName:=(ExtractFilePath(Application.ExeName)+'t0'+teamStr+'.avi');
//???????????????
MediaPlayerOk.Display:=PanelTip;
MediaPlayerOk.AutoRewind:=True;
end;
else
begin
//???????????
MediaPlayerOk.FileName:=(ExtractFilePath(Application.ExeName)+'heihei.avi');
MediaPlayerOk.Display:=PanelTip;
MediaPlayerOk.AutoRewind:=True;
end;
FormStart.Close;
FormStart.LabelOver.Caption:='60';
MediaPlayerOk.Close; //??????
MediaPlayerOk.Open;
MediaPlayerOk.Play;
TimerTip.Enabled:=True;
end;
?1-7????????????????????????????????
?1-7 ???
????????????TNMUDP??????????????????????????????????
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
MyStream: TMemoryStream;
TmpStr,Rmsg,teamName: String;
posStart,posEnd,scoreLast,teamNum:integer;
begin
MyStream := TMemoryStream.Create;
Try //?????????
NMUDP1.ReadStream(MyStream);
SetLength(TmpStr,NumberBytes);
MyStream.Read(TmpStr[1],NumberBytes);
Memo1.Clear;
Memo1.Lines.Add(FromIP+'*'+TmpStr);
finally
MyStream.Free;
end;
posStart:=Pos('*', TmpStr);
Rmsg:=copy(TmpStr,posStart+1,5);
if Rmsg='??' then //????????????
begin
Form1.NMUDP1.RemoteHost:=FromIP;
Form1.ButtonSent.Enabled:=True;
Form1.StatusBar1.SimpleText:='??????!';
end ;
if Rmsg='score' then //???????????
begin
posStart:=Pos('#', TmpStr);
posEnd:=Pos('@', TmpStr);
scoreLast:=strToint(copy(TmpStr,posStart+1,posEnd-posStart-1));
TeamName:= copy(TmpStr,posEnd+1,20);
teamNum:=strToint(copy(TmpStr,posEnd+1,1));
Form1.LabelScore.Caption:=intTOstr(scoreLast);
Form1.LabelScore.Visible:=True;
end;
end;
????????????????????????????????????????????????????????????Windows2000/98+Delphi 6.0??????
|
-
|