1

我在 Windows 窗体中使用 ScktComp 和 Winsock 创建了一个聊天服务器。如何在控制台应用程序中做同样的事情?

我发现这是一个起点,但是里面的链接(线程的作者回答“几乎完美的答案”)已经过期。

控制台应用程序中ServerSocketClientConnect/和其他方法的等价物是什么?ClientSocketConnect

4

2 回答 2

3

Delphi 在控制台应用程序中使用相同的类和非可视组件。您不需要更改您使用的类,但您需要学习如何通过手动输入来向单元添加内容,而不是依赖 Delphi IDE 为您生成代码。

您可以使用以下步骤自己创建它们,或者您可以使用在控制台应用程序中使用包含非可视组件的 VCL Win32 GUI 应用程序时已经构建的数据模块。

脚步:

  1. 将包含要使用的类或组件的单元名称添加到 Uses 子句。

  2. 像构造一个类一样构造组件:

      var
        aSomething:TSomething;
      begin
        aSomething := TSomething.Create(Parameter1,Parameter2);
      end;
    
  3. 记得在正确的地方释放它。

         aSomething.Free;
    

但是我很难理解为什么要将聊天服务器变成控制台应用程序,而不是作为玩具或实验。在实际使用中,您可能想要一个 Win32 GUI,或者您想要一个完全非可视化的服务(NT 风格的服务),您可以创建它,而无需将 APPTYPE 更改为控制台,但它可以在没有任何 GUI 的情况下运行,尽管如此。

我可以看到编写控制台应用程序的主要实际原因是从命令行编写有用的东西,例如构建帮助实用程序等。制作控制台应用程序本身非常容易。首先创建一个新的空控制台应用程序,向其中添加一个新的空帕斯卡单元,创建一个 main 方法,然后将您想要的单元名称添加到您正在处理的 main-unit 的 uses 子句中。这里的所有都是它的。

您可以继续使用您当前正在使用的服务器套接字和客户端套接字,但我建议您忘记控制台应用程序,除非您真的需要它,因为您所做的只是使程序的开发和操作更多很难没有真正的目的。您不必更改组件或类以在控制台应用程序中使用它们,但是,我应该说 GUI 或控制台类似,Delphi 中“Internet”选项卡上的 TTcpClient 和 TTcpServer 组件不适合实际使用任何现实世界的应用程序。它们是为了向后兼容而存在的,应该被认为是“过时的”和“不再以任何严肃的方式使用”。

查看真正的 TCP/IP 库,如 Indy、ICS、Synapse 或任何东西,除了来自组件选项板的“Internet”页面的那些组件,它们不适合在任何规模的现实世界中使用,除了“玩具”。

于 2013-01-03T14:12:55.940 回答
-1

一些 VCL 类需要 Windows 消息循环和/或窗口句柄。因此,如果您更改应用程序类型,它们可能会停止工作。

还要检查现有代码是否用于synchronize在 VCL 主线程中运行代码。在非 VCL 应用程序中使用同步可能很危险

于 2013-01-03T15:29:19.417 回答