有一个发送文件的程序,每次
procedure Tfm_main.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);过程中,接收到数据,我都要向外发数据
用socket.sendtext('aaaa');
而procedure Tfm_main.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);这个方法里面,不进行触发,是什么原因
procedure Tfm_main.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);过程中,接收到数据,我都要向外发数据
用socket.sendtext('aaaa');
而procedure Tfm_main.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);这个方法里面,不进行触发,是什么原因
在ServerSocket1ClientRead里设置断点,能进来么?socket.SendText('aaaa')执行了么?
下面写个例子,测试可以正常触发。
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, TeeEdit, ExtCtrls, TeeProcs, TeEngine, Chart, Series,ScktComp;type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
ServerSocket1: TServerSocket;
Button1: TButton;
Memo1: TMemo;
Memo2: TMemo;
Button3: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure Button3Click(Sender: TObject);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
TClient = class(TClientSocket);
var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
ServerSocket1.Active:=true;
ClientSocket1.Open;
end;procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('Connect to server!')
end;procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo2.Lines.Add('Client Connect!')
end;procedure TForm1.Button3Click(Sender: TObject);
begin
ClientSocket1.Socket.SendText(Edit1.Text);
end;procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo2.Lines.Add(Socket.ReceiveText);
Socket.SendText('client date receive');
end;procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add(Socket.ReceiveText);
end;end.
http://topic.csdn.net/u/20080426/16/a6b5f6f6-9298-45c0-8a90-492b9495ce89.html
这个帖子里是一个问题吧
procedure TForm1.BitBtn7Click(Sender: TObject);
begin
clientsocket1.Address:='127.0.0.1';
tempbool:=false;clientsocket1.ClientType:=ctNonBlocking;
clientsocket1.Open;tempbool:=true; //tempbool是个全局boolean变量,用来标志是否连接上
while(tempbool)do
begin
application.ProcessMessages;
end;clientsocket1.Socket.SendText('aaaaaaaa');
end;procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
showmessage(socket.ReceiveText);
socket.sendtext('aaaa');
end;procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
showmessage(Socket.ReceiveText);
end;procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
tempbool:=false;
end;这样可以在client端是非阻塞模式下同时解决你的两个问题
http://topic.csdn.net/u/20080507/11/7adf3e3b-16b9-4c11-a01b-83be267b7c92.html
两个帖子都是你发的.
很奇怪你是怎么会同时出现这两个问题的.按理说,当你的ClientSocket1的clienttype为nonblock时才会出现第一个问题,而只有当clienttype为block时才会出现第二个问题.....其实说到底都是网络通信延时造成的.软件工程师往往忽略硬件的具体情况将过程理想化.