大家好!我用Delphi 6的TServerSocket和TClientSocket做一个简单的通信工具,但一开始就遇到问题。代码如下://----Code of server side----
procedure TServerForm.FormCreate(Sender: TObject);
begin
with ServerSocket1 do
begin
Close;
Port := 49536;
ServerType := stNonBlocking;
Open;
end;
end;procedure TServerForm.ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
Memo1.Lines.Add('Error occurs: ' + IntToStr(ErrorCode));
ErrorCode := 0;
end;procedure TServerForm.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Clear;
Memo1.Lines.Add('Connected');
end;procedure TServerForm.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('Disconnected');
end;procedure TServerForm.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('Reading from socket...');
Memo1.Lines.Add(Socket.ReceiveText);
end;//----Code of client side----
procedure TClientForm.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
Memo1.Lines.Add('Error occurs: ' + IntToStr(ErrorCode));
ErrorCode := 0;
end;procedure TClientForm.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Clear;
Memo1.Lines.Add('Connected');
end;procedure TClientForm.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('Disconnected');
end;procedure TClientForm.ClientSocket1Write(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('Writing to socket...');
end;procedure TClientForm.btnSendClick(Sender: TObject);
begin
with ClientSocket1 do
begin
if not Active then
begin
Address := '127.0.0.1';
Port := 49536;
Open;
end;
Socket.SendText('Shaking hands...');
end;
end;我在客户端点击btnSend按钮,服务器上显示“Connected”,表明它的OnClientConnect事件已经触发,连接成功;但期望中的“'Reading from socket...”字样就没显示出来,使用Delphi调试也发现OnClientRead事件并没有触发。这是怎么回事呢?请指教
procedure TServerForm.FormCreate(Sender: TObject);
begin
with ServerSocket1 do
begin
Close;
Port := 49536;
ServerType := stNonBlocking;
Open;
end;
end;procedure TServerForm.ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
Memo1.Lines.Add('Error occurs: ' + IntToStr(ErrorCode));
ErrorCode := 0;
end;procedure TServerForm.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Clear;
Memo1.Lines.Add('Connected');
end;procedure TServerForm.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('Disconnected');
end;procedure TServerForm.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('Reading from socket...');
Memo1.Lines.Add(Socket.ReceiveText);
end;//----Code of client side----
procedure TClientForm.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
Memo1.Lines.Add('Error occurs: ' + IntToStr(ErrorCode));
ErrorCode := 0;
end;procedure TClientForm.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Clear;
Memo1.Lines.Add('Connected');
end;procedure TClientForm.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('Disconnected');
end;procedure TClientForm.ClientSocket1Write(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('Writing to socket...');
end;procedure TClientForm.btnSendClick(Sender: TObject);
begin
with ClientSocket1 do
begin
if not Active then
begin
Address := '127.0.0.1';
Port := 49536;
Open;
end;
Socket.SendText('Shaking hands...');
end;
end;我在客户端点击btnSend按钮,服务器上显示“Connected”,表明它的OnClientConnect事件已经触发,连接成功;但期望中的“'Reading from socket...”字样就没显示出来,使用Delphi调试也发现OnClientRead事件并没有触发。这是怎么回事呢?请指教
btnSendClick点第一次的时候Socket.SendText('Shaking hands...');没有触发
因为active=false
再点一下就ok了
你测试时能在服务器端看到“Reading from socket...”字样么?奇怪了我这里看不到,反复测试都这样。有些什么可能会导致这个问题呢?