Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
Ada 如何使用GNAT.sockets管理客户端连接?_Ada - Fatal编程技术网

Ada 如何使用GNAT.sockets管理客户端连接?

Ada 如何使用GNAT.sockets管理客户端连接?,ada,Ada,这是一个聊天客户端/服务器程序。要进行广播,我必须保存每个连接的客户端,然后向每个客户端写入数据,对吗?管理客户的最佳实践是什么 GNAT.Sockets.Accept_Socket( Server => Receiver, Socket => Connection, Address => Client ); Channel := GNAT.Sockets.Stream(Connection);

这是一个聊天客户端/服务器程序。要进行广播,我必须保存每个连接的客户端,然后向每个客户端写入数据,对吗?管理客户的最佳实践是什么

    GNAT.Sockets.Accept_Socket(
         Server  => Receiver,
         Socket => Connection,
        Address => Client
    );
    Channel := GNAT.Sockets.Stream(Connection);
    String'Write(Channel, "Welcome Message");

是的,你必须给每个客户写信。虽然有多播套接字可以为您解决一些问题

管理客户的最佳实践是让别人为你做这件事

我厌倦了反复编写socket代码,所以我简单地采用并编写了管理所有客户机/服务器、发布/订阅细节的方法


还有其他一些对Ada友好的协议,比如,也有同样的功能。

我想您可以先使用
GNAT.Sockets.Socket\u Set\u Type
来保存感兴趣的套接字,即服务器套接字和所有当前连接的客户端套接字

使用
GNAT.Sockets。选中_选择器
等待可读的事件发生,然后
GNAT.Sockets。获取
以找到相关的套接字(或其中一个套接字);如果是服务器套接字,则连接了一个新的客户机,否则现有客户机中有一个要读取的输入


我在我的书中有一个这样的例子;但请注意,这不适用于其中一个客户端响应太慢以致写入被阻止的情况。从这种情况中恢复将更加复杂。

谢谢你的回答。然而,由于我正处于学习阶段,我希望在没有任何“外部”库的情况下学习。它们肯定会在未来的项目中有用。