我这里有一段关于局域网的,不知道你感不感兴趣:
unit Main;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, NMUDP, ComCtrls;type
TFrmChat = class(TForm)
NMUDP1: TNMUDP;
EditIP: TEdit;
EditPort: TEdit;
EditMyTxt: TEdit;
CbName: TComboBox;
BtSend: TButton;
BtClear: TButton;
MemoReceive: TMemo;
SaveDialog1: TSaveDialog;
BtSave: TButton;
StatusBar1: TStatusBar;
MeSendTxt: TMemo;
procedure BtSendClick(Sender: TObject);
procedure NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer;
FromIP: String; Port: Integer);
procedure NMUDP1InvalidHost(var handled: Boolean);
procedure NMUDP1DataSend(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BtClearClick(Sender: TObject);
procedure BtSaveClick(Sender: TObject);
procedure EditMyTxtKeyPress(Sender: TObject; var Key: Char);
procedure MeSendTxtKeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
Function Trun_ip(S:string):string;
var
FrmChat: TFrmChat;implementation{$R *.DFM}Function Trun_ip(S:string):string;
var s1,s2,s3,ss,sss,Head:string;
n,m:integer;
begin
sss:=S;
n:=pos('.',s);
s1:=copy(s,1,n);
m:=length(s1);
delete(s,1,m);
Head:=copy(s1,1,(length(s1)-1));
n:=pos('.',s);
s2:=copy(s,1,n);
m:=length(s2);
delete(s,1,m);
n:=pos('.',s);
s3:=copy(s,1,n);
m:=length(s3);
delete(s,1,m);
ss:=sss;
if strtoint(Head) in [1..126] then ss:=s1+'255.255.255'; //1~126.255.255.255 (A类网)
if strtoint(Head) in [128..191] then ss:=s1+s2+'255.255';//128~191.XXX.255.255(B类网)
if strtoint(Head) in [192..254] then ss:=s1+s2+s3+'255'; //192~254.XXX.XXX.255(C类网)
Result:=ss;
end;procedure TFrmChat.BtSendClick(Sender: TObject);
var
MyStream: TMemoryStream;
MySendTxt: String;
Iport,icode:integer;
PcUser:PChar;
DwUSize:DWORD;
Begin
Val(EditPort.Text,Iport,icode);
if icode<>0 then
begin
Application.MessageBox('端口必须为数字,请重新输入!','信息',MB_ICONINFORMATION+MB_OK);
Exit;
end;
NMUDP1.RemoteHost := EditIP.Text; {远程主机}
NMUDP1.LocalPort:=Iport; {本地端口}
NMUDP1.RemotePort := Iport; {远程端口}
MysendTxt := MeSendTxt.Lines.Text;
//MySendTxt := EditMyTxt.Text;
MyStream := TMemoryStream.Create; {建立流}
try
MyStream.Write(MySendTxt[1], Length(MeSendTxt.Text));{写数据}
// MyStream.Write(MySendTxt[1], Length(EditMyTxt.Text));{写数据}
NMUDP1.SendStream(MyStream); {发送流}
// MemoReceive.Lines.Add('接收到来自主机'+FromIP+'的信息:'+MeSendTxt.Text);
MeSendTxt.Clear;
finally
MyStream.Free; {释放流}
end;
end;
procedure TFrmChat.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
MyStream: TMemoryStream;
MyReciveTxt,Name,Result: String;
PcUser,PcComputer :PChar;
DwUSize,dwCSize:DWORD;
begin
MyStream := TMemoryStream.Create; {建立流}
try
NMUDP1.ReadStream(MyStream);{接收流}
SetLength(MyReciveTxt,NumberBytes);{NumberBytes为接收到的字节数}
MyStream.Read(MyReciveTxt[1],NumberBytes);{读内存流中所有的数据} DwCSize := MAX_COMPUTERNAME_LENGTH + 1;
DwUSize := 21; // 用户名长度不大于20个字符
Name:='';
Result:='';
GetMem( pcUser, dwUSize );
GetMem( pcComputer, dwCSize );
try
if Windows.GetUserName( pcUser, dwUSize ) then
Name := pcUser;
if Windows.GetComputerName( pcComputer, dwCSize ) then
Result := pcComputer;
finally
FreeMem( PcUser );
FreeMem(PcComputer);
end;
MemoReceive.Lines.Add('接收到来自主机'+FromIP+'的信息:'+MyReciveTxt);
MemoReceive.Lines.Add('接收到来自主机'+Name+'的信息:'+MyReciveTxt);
MemoReceive.Lines.Add('接收到来自主机'+Result+'的信息:'+MyReciveTxt);
finally
MyStream.Free; {释放流}
end;
end;procedure TFrmChat.NMUDP1InvalidHost(var handled: Boolean);
begin
Application.MessageBox('对方IP地址不正确,请重新输入!','信息',MB_ICONINFORMATION+MB_OK);
end;procedure TFrmChat.NMUDP1DataSend(Sender: TObject);
begin
StatusBar1.SimpleText:='信息成功发出!';
end;procedure TFrmChat.FormCreate(Sender: TObject);
begin
EditIP.Text:='127.0.0.1';
EditPort.Text:='8868';
BtSend.Caption:='发送';
BtClear.Caption:='清除记录';
BtSave.Caption:='保存记录';
MemoReceive.ScrollBars:=ssBoth;
MemoReceive.Clear;
EditMyTxt.Text:='在这里输入信息,然后点击发送.'; StatusBar1.SimplePanel:=true;
end;procedure TFrmChat.BtClearClick(Sender: TObject);
begin
MemoReceive.Clear;
end;procedure TFrmChat.BtSaveClick(Sender: TObject);
begin
if SaveDialog1.Execute then MemoReceive.Lines.SaveToFile(SaveDialog1.FileName);
end;procedure TFrmChat.EditMyTxtKeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then BtSend.Click;
end;procedure TFrmChat.MeSendTxtKeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then BtSend.Click;
end;end.
unit Main;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, NMUDP, ComCtrls;type
TFrmChat = class(TForm)
NMUDP1: TNMUDP;
EditIP: TEdit;
EditPort: TEdit;
EditMyTxt: TEdit;
CbName: TComboBox;
BtSend: TButton;
BtClear: TButton;
MemoReceive: TMemo;
SaveDialog1: TSaveDialog;
BtSave: TButton;
StatusBar1: TStatusBar;
MeSendTxt: TMemo;
procedure BtSendClick(Sender: TObject);
procedure NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer;
FromIP: String; Port: Integer);
procedure NMUDP1InvalidHost(var handled: Boolean);
procedure NMUDP1DataSend(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BtClearClick(Sender: TObject);
procedure BtSaveClick(Sender: TObject);
procedure EditMyTxtKeyPress(Sender: TObject; var Key: Char);
procedure MeSendTxtKeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
Function Trun_ip(S:string):string;
var
FrmChat: TFrmChat;implementation{$R *.DFM}Function Trun_ip(S:string):string;
var s1,s2,s3,ss,sss,Head:string;
n,m:integer;
begin
sss:=S;
n:=pos('.',s);
s1:=copy(s,1,n);
m:=length(s1);
delete(s,1,m);
Head:=copy(s1,1,(length(s1)-1));
n:=pos('.',s);
s2:=copy(s,1,n);
m:=length(s2);
delete(s,1,m);
n:=pos('.',s);
s3:=copy(s,1,n);
m:=length(s3);
delete(s,1,m);
ss:=sss;
if strtoint(Head) in [1..126] then ss:=s1+'255.255.255'; //1~126.255.255.255 (A类网)
if strtoint(Head) in [128..191] then ss:=s1+s2+'255.255';//128~191.XXX.255.255(B类网)
if strtoint(Head) in [192..254] then ss:=s1+s2+s3+'255'; //192~254.XXX.XXX.255(C类网)
Result:=ss;
end;procedure TFrmChat.BtSendClick(Sender: TObject);
var
MyStream: TMemoryStream;
MySendTxt: String;
Iport,icode:integer;
PcUser:PChar;
DwUSize:DWORD;
Begin
Val(EditPort.Text,Iport,icode);
if icode<>0 then
begin
Application.MessageBox('端口必须为数字,请重新输入!','信息',MB_ICONINFORMATION+MB_OK);
Exit;
end;
NMUDP1.RemoteHost := EditIP.Text; {远程主机}
NMUDP1.LocalPort:=Iport; {本地端口}
NMUDP1.RemotePort := Iport; {远程端口}
MysendTxt := MeSendTxt.Lines.Text;
//MySendTxt := EditMyTxt.Text;
MyStream := TMemoryStream.Create; {建立流}
try
MyStream.Write(MySendTxt[1], Length(MeSendTxt.Text));{写数据}
// MyStream.Write(MySendTxt[1], Length(EditMyTxt.Text));{写数据}
NMUDP1.SendStream(MyStream); {发送流}
// MemoReceive.Lines.Add('接收到来自主机'+FromIP+'的信息:'+MeSendTxt.Text);
MeSendTxt.Clear;
finally
MyStream.Free; {释放流}
end;
end;
procedure TFrmChat.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
MyStream: TMemoryStream;
MyReciveTxt,Name,Result: String;
PcUser,PcComputer :PChar;
DwUSize,dwCSize:DWORD;
begin
MyStream := TMemoryStream.Create; {建立流}
try
NMUDP1.ReadStream(MyStream);{接收流}
SetLength(MyReciveTxt,NumberBytes);{NumberBytes为接收到的字节数}
MyStream.Read(MyReciveTxt[1],NumberBytes);{读内存流中所有的数据} DwCSize := MAX_COMPUTERNAME_LENGTH + 1;
DwUSize := 21; // 用户名长度不大于20个字符
Name:='';
Result:='';
GetMem( pcUser, dwUSize );
GetMem( pcComputer, dwCSize );
try
if Windows.GetUserName( pcUser, dwUSize ) then
Name := pcUser;
if Windows.GetComputerName( pcComputer, dwCSize ) then
Result := pcComputer;
finally
FreeMem( PcUser );
FreeMem(PcComputer);
end;
MemoReceive.Lines.Add('接收到来自主机'+FromIP+'的信息:'+MyReciveTxt);
MemoReceive.Lines.Add('接收到来自主机'+Name+'的信息:'+MyReciveTxt);
MemoReceive.Lines.Add('接收到来自主机'+Result+'的信息:'+MyReciveTxt);
finally
MyStream.Free; {释放流}
end;
end;procedure TFrmChat.NMUDP1InvalidHost(var handled: Boolean);
begin
Application.MessageBox('对方IP地址不正确,请重新输入!','信息',MB_ICONINFORMATION+MB_OK);
end;procedure TFrmChat.NMUDP1DataSend(Sender: TObject);
begin
StatusBar1.SimpleText:='信息成功发出!';
end;procedure TFrmChat.FormCreate(Sender: TObject);
begin
EditIP.Text:='127.0.0.1';
EditPort.Text:='8868';
BtSend.Caption:='发送';
BtClear.Caption:='清除记录';
BtSave.Caption:='保存记录';
MemoReceive.ScrollBars:=ssBoth;
MemoReceive.Clear;
EditMyTxt.Text:='在这里输入信息,然后点击发送.'; StatusBar1.SimplePanel:=true;
end;procedure TFrmChat.BtClearClick(Sender: TObject);
begin
MemoReceive.Clear;
end;procedure TFrmChat.BtSaveClick(Sender: TObject);
begin
if SaveDialog1.Execute then MemoReceive.Lines.SaveToFile(SaveDialog1.FileName);
end;procedure TFrmChat.EditMyTxtKeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then BtSend.Click;
end;procedure TFrmChat.MeSendTxtKeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then BtSend.Click;
end;end.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货