本文,我们将实现此Flutter应用程序的“客户端-服务器”部分。
工作模式
设备可以同时以这两种模式之一运行。
接收
发送
在第一种情况下,设备的行为类似于客户端,而在后一种情况下,它将仅仅是服务器。
在接收模式下,第一个客户端获取一个文件列表,这些文件准备由服务器共享。
然后,遍历该文件列表并逐个获取它们,而服务器则继续侦听传入的请求并为它们提供服务(如果来自允许的对方)。
首先,让我们编写一些代码以使我们的设备像客户端一样工作。
接收端
以下import语句将为我们获取所需的Dart类。
名为Client的类将包含所有Client功能,将在接收模式下显示。
现在,在我们的Client类中添加一个名为connect的方法。
在对客户端建模时,首先要获取可供服务器共享的文件列表,我们需要在客户端类中使用名为fetchFileNames的方法。
关闭从先前的connect方法收到的HttpClientRequest对象,为我们提供了HttpClientResponse对象,该对象用于读取Server的响应。
现在,我们需要定义另一个方法serializeJSON,这将帮助我们将JSON响应转换为Map <String,List >。
让我们从服务器获取这些文件。在Client类中添加一个新的方法fetchFile。
如果正确提取了文件,则方法返回true,否则返回false
最后一个方法名为disconnect,用于关闭HttpClient连接。
我们已经完成了声明客户端。
发送端
返回服务器。首先定义一个名为Server的类。
为了控制Server,我们需要在此类中声明另一个变量。
让我们开始侦听传入的连接。
为了处理传入连接,请在我们的Server类中添加一个名为handleRequest的方法。
在isPeerAllowed中检查是否可以授予对等方访问权限。
使用handleGETRequest处理过滤的GET请求。
最后但并非最不重要的是,一种停止服务器的方法。
这就是服务器端。
现在定义一个抽象类ServerStatusCallBack,以促进回调功能。需要从我们计划启动,控制和停止Server的位置实现此抽象类。
现在可以运行客户端了。
当前,我将仅通过命令行应用程序运行客户端。
对于Server,暂时也将使其保持命令行可执行性。
首先定义一个ServerDriver类,该类实现ServerStatusCallBack,获取服务器状态更新。
最后main()函数创建ServerDriver的一个实例,启动服务器。
注意,此客户端服务器程序目前是在局域网(LAN)中工作。
完整代码
详情参阅 - 亚图跨际