如何打开到特定 TCP 端口的 TCP 连接、发送字符串并读取 Lazarus 中的响应?

问题描述 投票:0回答:4

如果可能的话,我想在没有任何外部库的情况下完成此操作...

我想打开到特定 IP 地址上的特定端口的 TCP 连接,然后通过发送 ANSI 字符串进行通信并接收 ANSI 字符串响应。

可悲的是,我不知道从哪里开始,在互联网上搜索发现了一些看起来相当复杂的例子。

任何人都可以给我任何起点吗?

sockets tcp lazarus freepascal
4个回答
2
投票

您可以使用 Free Pascal 中提供的套接字类。我使用这些类创建了一个简单的项目:TCP/IP 客户端/服务器

我添加了三个示例来展示如何使用它:tcpipcomp/demo


0
投票

您可以使用一个优秀的、免费的多平台库,称为 Synapse。它内置支持许多协议(FTPHTTPPOP3LDAP 等),并且还允许您实现自己的协议。您只需几行代码就可以编写自己的客户端和服务器 - 太棒了!

它具有出色的调试功能,速度非常快且代码效率高。只需查看 HOWTO 区域中的演示即可。

如果您想了解有关 Synapse 与 Free PascalLazarus 的详细信息,请参阅 Synapse (wiki)。


0
投票

要检查连接是否仍然有效,您可以执行以下操作

SocketName.CanRead(Timeout: Integer);


0
投票

我听到你了。你需要什么客户端的连接号码。 我的互联网国际象棋应用程序的设计需要这个。 我创建了两个解决方案。 我的解决方案有效,但这里可能没有时间或空间来描述它们。 在分享我的解决方案之前,我想让您知道,如果同一 LAN 上的两个人连接到您的应用程序,捕获客户端的 RemoteAddress 将无法帮助您确定他们的连接号码。
另外...虽然 Socket:TCusomSocket.Data 很容易使用...但请注意,“数据”不是数据。它是一个指向数据的指针。我尝试了我所知道的一切,将一些独特的值与该数据关联起来,并在尝试确定正确的客户端连接数时对其进行比较,但失败了。你将走同样的路。您可能不会失败,但是,您将花费大量时间学习如何使用指针。 所以......这是我的 TCP Delphi TServerSocket/TClientSocket 解决方案的要点。 简而言之,每个客户端都有一个记录类型的实例,服务器也有一个相同的数组。
顺序...

  1. 当客户端连接时,服务器为其最新的数组元素分配一个唯一标识符
  2. 服务器将此标识符发送回客户端,前面带有“NC”(新连接)。
  3. 客户端接收“NC”编码消息并填充其记录中的其余字段
  4. 客户端将完整填充的记录发送回服务器。
  5. 服务器更新其记录以与客户端达成一致。 现在他们都认识了。 由于服务器上的记录的索引与它的连接号相同(零索引)...要查找客户端连接号,您可以在数组中找到客户端标识符 在服务器和客户端上,我创建一个记录类型...... 特雷克播放器 连接ID,成员ID,成员名称,消息:字符串[20]; 结尾; 在客户端应用程序上的私下中,我创建... 记录播放器:TrecPlayer;

在服务器应用程序上的 PRIVATE 中,我创建... arRecPlayer:TrecPlayer 数组;

代码... 在 TServerSocket 客户端连接事件中,我实例化了一个新的 arRecPlayer 元素...... arRecPlayer[x].ConnectionID := 复制(CreateClassID,1,19) + '}'; 然后服务器将其发送回刚刚连接的客户端 使用 ServerSocket.SendText('NC' + arRecPlayer[x].ConnectionID); “NC”是从 TClentSocket.ReceiveText 解析并执行代码... ServerSocket.Socket.SendText('NC' + arRecPlayer[x].ConnectionID + recThisPlayer.MemberID,'任何消息'); 当服务器收到第二个“NC”消息时,它会解析该消息并填充其 areRecPlayer[{当前连接号}].MemberID 字段以匹配客户端的字段。

后续从客户端发送的文本格式为指令(IS 邀请已发送、IA 邀请已接受、WO 谁在线、WRU 你是谁……当客户端断开连接时从服务器发送。所有客户端将其连接信息发送回服务器并且活动连接会自动恢复。 更多的... 就像我说的,这里没有足够的时间和空间。 给我发电子邮件 [电子邮件受保护]

山姆

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