源程序如下,我将ttcpserver控件和tclientserver都设为bmnonblocking
可在client端connect总是失败,请问是怎么回事
unit UnitServer;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, Sockets, StdCtrls;type
TForm1 = class(TForm)
TcpServer1: TTcpServer;
Button1: TButton;
TcpClient1: TTcpClient;
Memo1: TMemo;
Memo2: TMemo;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure TcpServer1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
procedure FormActivate(Sender: TObject);
procedure TcpServer1Listening(Sender: TObject);
procedure TcpClient1Connect(Sender: TObject);
procedure TcpClient1Receive(Sender: TObject; Buf: PChar;
var DataLen: Integer);
procedure TcpClient1Send(Sender: TObject; Buf: PChar;
var DataLen: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
pbufStr:PChar;
s,s2:string;
i:integer;
begin
TcpClient1.Active:= not TcpClient1.Active;
TcpClient1.RemoteHost:='10.0.5.254';
TcpClient1.RemotePort:='5000';
s:=trim(memo1.Text);
i:=length(s);
SetLength(s2,i);
System.Move(s[1],s2[1] ,i); TcpClient1.Active:=True;
if not TcpClient1.connected then
begin
TcpClient1.Open;
TcpClient1.Connect;
end;
TcpClient1.SendBuf(pbufstr,i);
{ try
if TcpClient1.Connect then
TcpClient1.SendBuf(pbufstr,i);
finally
TcpClient1.Disconnect;
end;
}
end;procedure TForm1.TcpServer1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
var tmpStr:array[0..100] of Char;
begin
ClientSocket.ReceiveBuf(tmpStr,10);
Memo2.Text:=tmpStr;
end;procedure TForm1.FormActivate(Sender: TObject);
begin
TcpServer1.LocalPort:='5000';
TcpServer1.Active:=True;end;procedure TForm1.TcpServer1Listening(Sender: TObject);
beginend;procedure TForm1.TcpClient1Connect(Sender: TObject);
begin
end;procedure TForm1.TcpClient1Receive(Sender: TObject; Buf: PChar;
var DataLen: Integer);
begin
end;procedure TForm1.TcpClient1Send(Sender: TObject; Buf: PChar;
var DataLen: Integer);
var tstr:string;
i:integer;
beginend;end.
可在client端connect总是失败,请问是怎么回事
unit UnitServer;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, Sockets, StdCtrls;type
TForm1 = class(TForm)
TcpServer1: TTcpServer;
Button1: TButton;
TcpClient1: TTcpClient;
Memo1: TMemo;
Memo2: TMemo;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure TcpServer1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
procedure FormActivate(Sender: TObject);
procedure TcpServer1Listening(Sender: TObject);
procedure TcpClient1Connect(Sender: TObject);
procedure TcpClient1Receive(Sender: TObject; Buf: PChar;
var DataLen: Integer);
procedure TcpClient1Send(Sender: TObject; Buf: PChar;
var DataLen: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
pbufStr:PChar;
s,s2:string;
i:integer;
begin
TcpClient1.Active:= not TcpClient1.Active;
TcpClient1.RemoteHost:='10.0.5.254';
TcpClient1.RemotePort:='5000';
s:=trim(memo1.Text);
i:=length(s);
SetLength(s2,i);
System.Move(s[1],s2[1] ,i); TcpClient1.Active:=True;
if not TcpClient1.connected then
begin
TcpClient1.Open;
TcpClient1.Connect;
end;
TcpClient1.SendBuf(pbufstr,i);
{ try
if TcpClient1.Connect then
TcpClient1.SendBuf(pbufstr,i);
finally
TcpClient1.Disconnect;
end;
}
end;procedure TForm1.TcpServer1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
var tmpStr:array[0..100] of Char;
begin
ClientSocket.ReceiveBuf(tmpStr,10);
Memo2.Text:=tmpStr;
end;procedure TForm1.FormActivate(Sender: TObject);
begin
TcpServer1.LocalPort:='5000';
TcpServer1.Active:=True;end;procedure TForm1.TcpServer1Listening(Sender: TObject);
beginend;procedure TForm1.TcpClient1Connect(Sender: TObject);
begin
end;procedure TForm1.TcpClient1Receive(Sender: TObject; Buf: PChar;
var DataLen: Integer);
begin
end;procedure TForm1.TcpClient1Send(Sender: TObject; Buf: PChar;
var DataLen: Integer);
var tstr:string;
i:integer;
beginend;end.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货