Delphi 5是Tserversocket和Tclientsocket的简单示例

问题描述 投票:-2回答:1

如果可能的话,在DELPHI 5中提供一个示例

假设我们有以下代码。一个简单的tclientsocket与tserver套接字通信。如果来自tclientsocket的请求在事件tserversocket1onReadClient上的数据进程之后出现,那么一切正常。但是我如何在进程中间绕过这个问题我从socketclient1获得一个新的请求而我还没有完成我的进程?

  1. 我必须在ServerType中实现它:stThreadBlocking
  2. 我是否必须创建一个线程来执行该过程?
  3. 这样做是否更好?

我的tclientsocket字符串消息不会超过255个字符。

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ScktComp;

type
  TForm1 = class(TForm)
    ClientSocket1: TClientSocket;
    Button1: TButton;
    ServerSocket1: TServerSocket;
    procedure Button1Click(Sender: TObject);
    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure ServerSocket1ClientError(Sender: TObject;Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;var ErrorCode: Integer);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
  private
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
with Serversocket1 do
begin
Active:=false;
ServerType:=stNonBlocking;
port:=5052;
Active:=true;
end;

with ClientSocket1 do
begin
active:=false;
port:=5052;
Address:='127.0.0.1';
host:='127.0.0.1';
active:=true;
end;
end;

procedure TForm1.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
errorcode:=0;
end;

procedure TForm1.ServerSocket1ClientError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
errorcode:=0;
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;Socket: TCustomWinSocket);
var mydata:String;
begin
mydata:=socket.ReceiveText;
///Proceccing my data now
//Line 1
//Line 2
//Line 3
//Line 4  <---- ie. when i am proccessing line 4 a new Request from clientsocket1 arrives
//Line 5
end;

end.
delphi
1个回答
1
投票

您描述的场景不可能发生。当ServerSocket1ClientRead事件处理程序正在执行时,它不会以可重入的方式调用。好吧,除非你打电话给Application.ProcessMessages。所以,不要那样做!

© www.soinside.com 2019 - 2024. All rights reserved.