主题:Delphi Socket外网通信求助 (:
我是Delphi新手,有很多东西都不懂。这次又碰到个问题,一不小心就找到这个论坛来了,希望知道的朋友指点一二,谢谢!
下面是整段程序复制下来的,在运行过程中,IP地址设为127.0.0.1或192.168.0.10就能完成通信功能,但是我用外网的IP:218.88.218.55(用专门查IP的网查出来的)就是连不上啊,用路由器管理的网页查出来也是这个IP(当然现在这里写的这个IP是假设的),我用127.0.0.1或192.168.0.10能连上,再重新打开用218.88.218.55和218.088.218.055却连不上。
懂一点的朋友指点一下好吗?谢谢!
程序源代码如下:
//-----------------------------
unit filesend;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp, ComCtrls;
type
TForm1 = class(TForm)
Label2: TLabel;
Edit2: TEdit;
Button1: TButton;
OpenDialog1: TOpenDialog;
Button3: TButton;
SaveDialog1: TSaveDialog;
ServerSocket1: TServerSocket;
GroupBox1: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
ClientSocket1: TClientSocket;
StatusBar1: TStatusBar;
Edit1: TEdit;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
procedure RadioButton2Click(Sender: TObject);
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1Listen(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button2Click(Sender: TObject);
procedure ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Connecting(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
fname:string;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
opendialog1.Execute;
fname:=opendialog1.FileName;
edit2.Text:=fname;
button3.Enabled :=true;
groupbox1.Enabled :=true;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
edit2.Clear;
end;
procedure TForm1.Button3Click(Sender: TObject);
var f1,f2:file;savebtn:string;
buf:array[0..1023]of byte;
cnt:integer;
begin
savedialog1.FileName:=opendialog1.FileName;
savedialog1.Execute;
savebtn:=savedialog1.FileName;
assignfile(f1,edit2.Text);
assignfile(f2,savebtn);
reset(f1,1);
rewrite(f2,1);
try
repeat
blockread(f1,buf,sizeof(buf),cnt);
blockwrite(f2,buf,cnt,cnt);
until cnt<sizeof(buf)
finally
closefile(f2);
closefile(f1);
end
end;
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
button2.Enabled :=true;
clientsocket1.Close;
serversocket1.open;
end;
procedure TForm1.RadioButton2Click(Sender: TObject);
var IPstr:string;
begin
button2.Enabled :=true;
serversocket1.Close;
ipstr:=inputbox('请输入服务器IP','','127.0.0.1');
clientsocket1.Address:=ipstr;
clientsocket1.open;
end;
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
statusbar1.Panels[0].Text:='连接成功!' ;
end;
procedure TForm1.ServerSocket1Listen(Sender: TObject;
Socket: TCustomWinSocket);
begin
statusbar1.Panels[0].text:='正在连接客户机...';
end;
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
statusbar1.Panels[0].Text:='已断开与客户机的接连...';
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
serversocket1.Close;
clientsocket1.Close;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if radiobutton2.Checked then clientsocket1.socket.sendtext(edit1.text);
if radiobutton1.Checked then serversocket1.Socket.Connections[0].SendText(edit1.text);
statusbar1.Panels [1].Text:='本地消息:'+edit1.Text;
begin
end;
edit1.Clear;
end;
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
statusbar1.Panels[0].text:='已断开与服务器的连接...';
end;
procedure TForm1.ClientSocket1Connecting(Sender: TObject;
Socket: TCustomWinSocket);
begin
statusbar1.Panels[0].text:='正在连接服务器...';
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
statusbar1.Panels[0].text:='连接成功!';
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
statusbar1.Panels [1].Text:='远程消息:'+serversocket1.Socket.Connections[0].ReceiveText;
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
statusbar1.Panels [1].Text:='远程消息:'+socket.ReceiveText;
end;
end.
下面是整段程序复制下来的,在运行过程中,IP地址设为127.0.0.1或192.168.0.10就能完成通信功能,但是我用外网的IP:218.88.218.55(用专门查IP的网查出来的)就是连不上啊,用路由器管理的网页查出来也是这个IP(当然现在这里写的这个IP是假设的),我用127.0.0.1或192.168.0.10能连上,再重新打开用218.88.218.55和218.088.218.055却连不上。
懂一点的朋友指点一下好吗?谢谢!
程序源代码如下:
//-----------------------------
unit filesend;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp, ComCtrls;
type
TForm1 = class(TForm)
Label2: TLabel;
Edit2: TEdit;
Button1: TButton;
OpenDialog1: TOpenDialog;
Button3: TButton;
SaveDialog1: TSaveDialog;
ServerSocket1: TServerSocket;
GroupBox1: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
ClientSocket1: TClientSocket;
StatusBar1: TStatusBar;
Edit1: TEdit;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
procedure RadioButton2Click(Sender: TObject);
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1Listen(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button2Click(Sender: TObject);
procedure ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Connecting(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
fname:string;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
opendialog1.Execute;
fname:=opendialog1.FileName;
edit2.Text:=fname;
button3.Enabled :=true;
groupbox1.Enabled :=true;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
edit2.Clear;
end;
procedure TForm1.Button3Click(Sender: TObject);
var f1,f2:file;savebtn:string;
buf:array[0..1023]of byte;
cnt:integer;
begin
savedialog1.FileName:=opendialog1.FileName;
savedialog1.Execute;
savebtn:=savedialog1.FileName;
assignfile(f1,edit2.Text);
assignfile(f2,savebtn);
reset(f1,1);
rewrite(f2,1);
try
repeat
blockread(f1,buf,sizeof(buf),cnt);
blockwrite(f2,buf,cnt,cnt);
until cnt<sizeof(buf)
finally
closefile(f2);
closefile(f1);
end
end;
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
button2.Enabled :=true;
clientsocket1.Close;
serversocket1.open;
end;
procedure TForm1.RadioButton2Click(Sender: TObject);
var IPstr:string;
begin
button2.Enabled :=true;
serversocket1.Close;
ipstr:=inputbox('请输入服务器IP','','127.0.0.1');
clientsocket1.Address:=ipstr;
clientsocket1.open;
end;
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
statusbar1.Panels[0].Text:='连接成功!' ;
end;
procedure TForm1.ServerSocket1Listen(Sender: TObject;
Socket: TCustomWinSocket);
begin
statusbar1.Panels[0].text:='正在连接客户机...';
end;
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
statusbar1.Panels[0].Text:='已断开与客户机的接连...';
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
serversocket1.Close;
clientsocket1.Close;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if radiobutton2.Checked then clientsocket1.socket.sendtext(edit1.text);
if radiobutton1.Checked then serversocket1.Socket.Connections[0].SendText(edit1.text);
statusbar1.Panels [1].Text:='本地消息:'+edit1.Text;
begin
end;
edit1.Clear;
end;
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
statusbar1.Panels[0].text:='已断开与服务器的连接...';
end;
procedure TForm1.ClientSocket1Connecting(Sender: TObject;
Socket: TCustomWinSocket);
begin
statusbar1.Panels[0].text:='正在连接服务器...';
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
statusbar1.Panels[0].text:='连接成功!';
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
statusbar1.Panels [1].Text:='远程消息:'+serversocket1.Socket.Connections[0].ReceiveText;
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
statusbar1.Panels [1].Text:='远程消息:'+socket.ReceiveText;
end;
end.