首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi7 tcpclient和server有个有关问题。麻烦

2012-03-09 
delphi7 tcpclient和server有个问题。麻烦!我用tcpclient连接tcpserver的时候当client连接到server的时候se

delphi7 tcpclient和server有个问题。麻烦!
我用tcpclient连接tcpserver的时候

当client连接到server的时候server提示了连接成功但是马上又显示了连接结束了。。。这个是tcp这个控件的问题吗?

我设置了connet和disconnet。。。server这个直接运行了连接和断开的输出。但是按照常理来说连接的时候才提示连接断开的时候才提示断开嘛。。。。









[color=#FFFFFF]传奇服务端[/color]

[解决办法]
我昨天测试的一个例子你参考一下

客户端

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdAntiFreezeBase, IdAntiFreeze;

type
TForm1 = class(TForm)
IdTCPClient1: TIdTCPClient;
Label1: TLabel;
edtIP: TEdit;
Label2: TLabel;
edtPort: TEdit;
Label3: TLabel;
edtSendData: TEdit;
btSend: TButton;
Label4: TLabel;
Memo1: TMemo;
btDisConn: TButton;
IdAntiFreeze1: TIdAntiFreeze;
btConn: TButton;
procedure btConnClick(Sender: TObject);
procedure btSendClick(Sender: TObject);
procedure btDisConnClick(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btConnClick(Sender: TObject);
begin
IdTCPClient1.Host:=edtIP.Text;
IdTCPClient1.Port:=StrtoInt(edtPort.Text);
Memo1.Lines.Add('正在连接'+edtIP.Text+'...');
 with IdTCPClient1 do begin
try
connect(5000);
try
Memo1.Lines.Add(ReadLn());
btConn.Enabled:=false;
btDisConn.Enabled:=true;
btSend.Enabled:=true;
except
Memo1.Lines.Add('远程主机无响应!');
IdTCPClient1.Disconnect;
end;
except
Memo1.Lines.Add('无法建立到'+edtIP.Text+'的连接!');
end;
 end;
end;

procedure TForm1.btSendClick(Sender: TObject);
begin
Memo1.Lines.Add('DATA '+edtSendData.Text) ;
with IdTCPClient1 do
begin
try
IdTCPClient1.WriteLn('DATA'+edtSendData.Text);
Memo1.Lines.Add(ReadLn())
except
Memo1.Lines.Add('发送数据失败!');
IdTCPClient1.Disconnect;
Memo1.Lines.Add('同主机'+edtIP.Text+'的连接已断开。');
btConn.Enabled:=true;
btSend.Enabled:=false;
btDisConn.Enabled:=false;

end;
end;
end;

procedure TForm1.btDisConnClick(Sender: TObject);
var
 Received:string;
begin
Memo1.Lines.Add('QUIT');
try
IdTCPClient1.WriteLn('QUIT');
finally
IdTCPClient1.Disconnect;
Memo1.Lines.Add('同主机'+edtIP.Text+'的连接已断开。') ;
btConn.Enabled:=true;
btSend.Enabled:=false;
btDisConn.Enabled:=false;
end;
end;

end.


服务器端
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPServer;

type
TForm1 = class(TForm)
Label1: TLabel;
edtPort: TEdit;
Label2: TLabel;
edtRecvData: TEdit;
Label3: TLabel;
Memo1: TMemo;
btStart: TButton;
btStop: TButton;
IdTCPServer1: TIdTCPServer;
procedure btStartClick(Sender: TObject);
procedure btStopClick(Sender: TObject);
procedure IdTCPServer1Connect(AThread: TIdPeerThread);
procedure IdTCPServer1Execute(AThread: TIdPeerThread);
private
{ Private declarations }
FlogEntry,FReceived:string;
procedure AddLogEntry ;
procedure DisplayData ;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.AddLogEntry;
begin
Memo1.Lines.Add(FlogEntry);


end;

procedure TForm1.DisplayData;
begin
edtRecvData.Text:=FReceived;
end;

procedure TForm1.btStartClick(Sender: TObject);
begin
IdTCPServer1.DefaultPort:=StrtoInt(edtPort.Text);
IdTCPServer1.Active:=true;
btStart.Enabled:=false;
btStop.Enabled:=true;
Memo1.Lines.Add('服务器已经成功启动!');

end;

procedure TForm1.btStopClick(Sender: TObject);
begin
IdTCPServer1.Active:=false;
btStart.Enabled:=true;
btStop.Enabled:=false;
Memo1.Lines.Add('服务器已成功停止!');
end;



procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
begin
 Memo1.Lines.Add('来自主机'+AThread.Connection.Socket.Binding.PeerIP+
 '的连接请求已被接纳!');
 AThread.Connection.WriteLn('100:欢迎访问TCP服务器!');
end;

procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
sCommand:String;
begin
with AThread.Connection do
begin
sCommand:=ReadLn() ;
FlogEntry:= sCommand+'来自主机'+AThread.Connection.Socket.Binding.PeerIP;
AThread.Synchronize(AddLogEntry );
if pos('DATA',sCommand)>0 then begin
FReceived:=copy(sCommand,5,length(sCommand)-5);
AThread.Synchronize(DisplayData);
end else if pos('QUIT',sCommand)>0 then begin
FlogEntry:= '断开同主机'+AThread.Connection.Socket.Binding.PeerIP+'的连接';
AThread.Synchronize(AddLogEntry);
AThread.Connection.Disconnect;
end else begin
FlogEntry:= '无法识别的命令!';
AThread.Synchronize(AddLogEntry);
end;
end;
end;
end.

热点排行