我是用了两个TUDPSocket, 一个发送数据,另一个接受,但不知道这个控件怎么用,我使用SendTo和ReceiveFrom收发数据,但接受方无法接受。
请问TUDPSocket究竟该怎么用,SendTo何ReceiveFrom的每个参数是什么意思
请问TUDPSocket究竟该怎么用,SendTo何ReceiveFrom的每个参数是什么意思
解决方案 »
- 向RichEdit输入汉字问题
- IE工具条不能自动显示
- 用Tchart化的直线图,怎样才能实现把鼠标往某直线某一个点一放就能显示出该点的横纵坐标值??
- tcxgriddbtableview 的可自动排序的选项是哪个啊
- 用SendMessage怎么发送一个鼠标消息
- 如何在TreeView控件加CheckBox控件
- 数据库模板是什么?
- 我要Window2000 profession的电脑通过 windows2000 Advance 联上互联网? windows2000 Advance是通过猫咪上网的。
- 诚聘程序员
- 各位做过象 人事管理系统 类的大型软件的大哥们告诉小弟怎么去做。。
- delphi变量?
- 请问有关Delta的问题!
port 应该一直,才能够通讯,sendto 是法消息给对方的函数,中间包括内容,地址等参数,receivefrom是接受消息,一般不用,都使用接受流的方式进行,对于较小的文字的话,可以使用receivetext 方式,最好先将帮助仔细看一遍
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, NMUDP, ExtCtrls, Buttons,
Menus,ComCtrls,WinSock;//file://增加WinSock;type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
NMUDP1: TNMUDP;
ListBox1: TListBox;
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Label1: TLabel;
BitBtn1: TBitBtn;
Button3: TButton;
procedure FormShow(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer;
FromIP: String; Port: Integer);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Button1Click(Sender: TObject);
//procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
ComputerName: array[0..127] of Char;implementation{$R *.DFM}procedure TForm1.FormShow(Sender: TObject);
var sz:dword;begin sz := SizeOf(Computername); GetComputerName(ComputerName, sz);//得到本机的标识 ListBox1.Items.Clear; ListBox1.Items.Add('大家');//在网友清单中,增加"大家"和 ListBox1.Items.Add(ComputerName);//本机名称 ListBox1.ItemIndex:=0;end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var MyStream: TMemoryStream; TmpStr: String; i:integer; Begin //if Edit1.Text<>'' then file://如果所说的内容不为空,则发送。 begin NMUDP1.ReportLevel := Status_Basic; //NMUDP1.RemotePort :=8888;//端口为:8888,可以自己定义,但必须与LocalPort相一致。 if ListBox1.Items[ListBox1.ItemIndex]=ComputerName then Edit1.Text:=ComputerName+'自言自语道:'+Edit1.Text //file://如果和自己对话. Else Edit1.Text:=ComputerName+'对'+ListBox1.Items[listbox1.itemindex]+'说:'+Edit1.Text; TmpStr :=Edit1.text; MyStream := TMemoryStream.Create; try MyStream.Write(TmpStr[1], Length(Edit1.Text)); if ListBox1.ItemIndex=0 then begin for i:=1 to ListBox1.Items.Count-1 do //file://如果选择"大家",则对所有的网友发送信息 begin NMUDP1.RemoteHost :=ListBox1.Items[i];//远程主机的名称或地址. NMUDP1.SendStream(MyStream);//发送信息. End; end else //如果私聊 begin NMUDP1.RemoteHost :=ListBox1.Items[ListBox1.itemindex]; //file://仅对所选中的网友. NMUDP1.SendStream(MyStream); End; finally MyStream.Free; end; Edit1.Text:=''; Edit1.SetFocus; end;
//else Edit1.SetFocus; end;
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var MyStream: TMemoryStream; TmpStr: String; begin MyStream := TMemoryStream.Create; try NMUDP1.ReadStream(MyStream); SetLength(TmpStr,NumberBytes); MyStream.Read(TmpStr[1],NumberBytes); Memo1.Lines.Add(TmpStr); //file://显示对话的内容. finally MyStream.Free; end; end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var MyStream: TMemoryStream; TmpStr: String; i:integer; Begin if (key=#13) and (Edit1.Text<>'') then //file://如果所说的内容不为空,且最后一个按键为"Enter",则发送。 begin NMUDP1.ReportLevel := Status_Basic; NMUDP1.RemotePort :=8888; if ListBox1.Items[ListBox1.ItemIndex]=ComputerName then Edit1.Text:=ComputerName+'自言自语道:'+Edit1.Text else Edit1.Text:=ComputerName+'对'+ListBox1.Items[listbox1.itemindex]+'说:'+Edit1.Text; TmpStr :=Edit1.text; MyStream := TMemoryStream.Create; try MyStream.Write(TmpStr[1], Length(Edit1.Text)); if ListBox1.ItemIndex=0 then begin for i:=1 to ListBox1.Items.Count-1 do begin NMUDP1.RemoteHost :=ListBox1.Items[i]; NMUDP1.SendStream(MyStream); end; end else begin NMUDP1.RemoteHost :=ListBox1.Items[ListBox1.itemindex]; NMUDP1.SendStream(MyStream); end; finally MyStream.Free; end; Edit1.Text:=''; edit1.SetFocus; end
else Edit1.SetFocus; end;procedure TForm1.Button1Click(Sender: TObject);var InputString:String; begin //file;//增加网友,输入的可以是IP地址或计算机名称。 InputString:=InputBox('增加人员', 'IP地址或计算机名', ''); if Inputstring<>'' then ListBox1.Items.Add(Inputstring); ListBox1.ItemIndex:=0; end;
procedure TForm1.Button3Click(Sender: TObject);
begin //file://删除当前选中的网友,但"大家"不能被删除. if ListBox1.ItemIndex<>0 then ListBox1.Items.Delete(ListBox1.ItemIndex); end;
end.