Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TTcpServer";“停止”;在Linux中_Linux_Delphi_Sockets_Ttcpserver_Kylix - Fatal编程技术网

TTcpServer";“停止”;在Linux中

TTcpServer";“停止”;在Linux中,linux,delphi,sockets,ttcpserver,kylix,Linux,Delphi,Sockets,Ttcpserver,Kylix,这两个控制台应用程序包括一个使用bmThreadBlocking模式TTcpServer的套接字服务器和一个使用bmThreadBlocking模式TTcpClient的套接字客户端。TTcpClient用于连接到服务器,发送线路,然后断开连接。TTCP服务器用于侦听传入连接,并回显其OnAccept事件处理程序中接收到的线路 这两个控制台应用程序在Windows(XP和7)中运行良好。但是,当我直接使用CrossKylix或Kylix编译它时,应用程序无法在Linux(SuSE 10.0和Ce

这两个控制台应用程序包括一个使用bmThreadBlocking模式TTcpServer的套接字服务器和一个使用bmThreadBlocking模式TTcpClient的套接字客户端。TTcpClient用于连接到服务器,发送线路,然后断开连接。TTCP服务器用于侦听传入连接,并回显其OnAccept事件处理程序中接收到的线路

这两个控制台应用程序在Windows(XP和7)中运行良好。但是,当我直接使用CrossKylix或Kylix编译它时,应用程序无法在Linux(SuSE 10.0和CentOs 5u7)中按预期运行。只要一个客户端连接,即在TTcpServer的OnAccept事件处理程序内/之后,服务器应用程序就会“[1]+停止。/TestSocketServer_1_Console_Native”。你能帮我评论一下这个问题吗?任何帮助都将不胜感激

这两个控制台应用程序可在以下位置下载:

为了方便起见,源代码也粘贴在这里。(端口号98765或1876或其他一些号码没有帮助。)

TestSocketServer_1_控制台_本机 TestSocketServer_1_控制台_Native.dpr uServerDataModule.pas TestSocketClient_1_控制台_本机 TestSocketClient_1_Console_Native.dpr uClientDataModule.pas
Port:='98765',真的吗?@DownVorters:你介意告诉我为什么吗?@user539484:谢谢,但那个有趣的端口号似乎不是问题所在,不是吗?那是问题还是陈述?修好它。阅读任何easy sockets常见问题解答为什么。@user539484:谢谢,但我相信您一定已经知道,这个有趣的端口号没有害处,不管常见问题解答中指定的范围限制如何。
program TestSocketServer_1_Console_Native;

{$APPTYPE CONSOLE}

uses
  uServerDataModule in 'uServerDataModule.pas' {ServerDataModule: TServerDataModule},
  SysUtils;

begin
  { TODO -oUser -cConsole Main : Insert code here }
  ServerDataModule := TServerDataModule.Create(nil);
  try
    ServerDataModule.tcpServerCCL.Active := True;
    while True do
    begin
      Sleep(500);
    end;
  finally
    ServerDataModule.Free;
  end;
end.
unit uServerDataModule;

interface

uses
  SysUtils, Classes, Sockets;

type
  TServerDataModule = class(TDataModule)
    tcpServerCCL: TTcpServer;
  private
    { Private declarations }
    procedure tcpServerCCLAccept(Sender: TObject; ClientSocket: TCustomIpClient);
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
  end;

var
  ServerDataModule: TServerDataModule;

implementation

{$R *.dfm}

{ TServerDataModule }

constructor TServerDataModule.Create(AOwner: TComponent);
begin
  inherited;
  tcpServerCCL.Active := False;
  tcpServerCCL.LocalPort := '98765';
  tcpServerCCL.OnAccept := tcpServerCCLAccept;
end;

procedure TServerDataModule.tcpServerCCLAccept(Sender: TObject; ClientSocket:
    TCustomIpClient);
var
  l_InputStr: string;
begin
  WriteLn('Accepted connection from ' + ClientSocket.LocalHost);
  l_InputStr := ClientSocket.Receiveln();
  Writeln(PChar(l_InputStr));
end;

end.
    
program TestSocketClient_1_Console_Native;

{$APPTYPE CONSOLE}

uses         
  uClientDataModule in 'uClientDataModule.pas' {ClientDataModule: TClientDataModule},
  SysUtils;

begin
  { TODO -oUser -cConsole Main : Insert code here }
  ClientDataModule := TClientDataModule.Create(nil);
  try
    if ClientDataModule.tcpClientCCL.Connect then
    begin
      ClientDataModule.tcpClientCCL.Sendln('hello from client');
    end;
  finally
  end;
end.
unit uClientDataModule;

interface

uses
  SysUtils, Classes, Sockets;

type
  TClientDataModule = class(TDataModule)
    tcpClientCCL: TTcpClient;
  private
    { Private declarations }
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
  end;

var
  ClientDataModule: TClientDataModule;

implementation

{$R *.dfm}

{ TClientDataModule }

constructor TClientDataModule.Create(AOwner: TComponent);
begin
  inherited;
  tcpClientCCL.Active := False;
  tcpClientCCL.RemoteHost := '127.0.0.1';
  tcpClientCCL.RemotePort := '98765';
end;

end.