对于大多数编程问题,请使用[network-programming]标签。非编程网络问题不在主题,应该在网络工程,超级用户或服务器故障上询问。此标记仅适用于支持软件开发的独特网络需求问题。
我有一个运行 Android 的小型电视盒设备。每当我打开 Wi-Fi 接口时,以太网接口就会断开连接。如果我随后打开以太网设备、Wi-Fi 接口。 我有...
是否可以从 MacOS 命令行或使用脚本切换网络链接调节器配置文件,并且通常是否可以自动化 NLC,如果可以,如何实现? 预先感谢您。
如何在 Selenium Webdriver C# 中捕获网络请求?
如果我需要在 Selenium C# 测试运行时检查网络请求的情况,该怎么做? 与大家分享我的解决方案。
问题:我的 docker-compose 脚本无法连接到出站互联网。 目前我使用的是 Ubuntu 22.04.2 系统。在我的另一台服务器 Ubuntu 20 上,相同的脚本可以运行。因此我的配置...
我正在尝试编写一个批处理文件来关闭使用超过一定互联网量的进程。当然我想要的应用程序,必须超过这个限制。请注意:我不想...
我一直在尝试解决这个问题,但我想我需要你的帮助。我是新手,我似乎找不到问题所在。 当源和目标都设置为 localhost 时,该代码可以工作。但是当我使用
使用 npm 安装 Node.js 应用程序的依赖项时,它会停止。但在中国境外使用没有任何问题。谁知道如何让它在 VPN/SSH 通道旁边工作。 $ npm 安装 npm htt...
我使用VS 2022。我需要使用我公司的nuget包的特定源。我已经完成了该视频中描述的所有步骤(直接转到 1:45 - 从这一刻起我开始了我的开发工作......
我使用 Ubuntu 18 和 UFW 作为基本防火墙。 我需要限制来自设备的一些 ARP 流量,可以使用以下 arptables 命令来实现: sudo arptables -I 输出 --source-mac
即使套接字已收到数据,async_read_some() 操作也不会运行?
int main(int argc, char *argv[]) { int 接受计数器 = 0; std::array message_buffer; 升压::asio::io_context io_context; std::向量 int main(int argc, char *argv[]) { int acceptingCounter = 0; std::array<char, 2048> message_buffer; boost::asio::io_context io_context; std::vector<tcp::endpoint * > active_connections; std::vector< tcp::socket * > mySocks; //Create a tcp::acceptor object to listen for new connections. //Initialised to listen on port 13. tcp::acceptor acceptor(io_context, tcp::endpoint(tcp::v4(), 1025)); bool reading = false; std::cout << "Accepting..." << std::endl; while (true) { if (acceptingCounter < 1){ tcp::socket * sock = new tcp::socket(io_context); tcp::endpoint * endpoint = new tcp::endpoint; // mySocks.push_back(sock); acceptor.async_accept(*sock,*endpoint,[endpoint,&active_connections, &acceptingCounter, &mySocks, sock](boost::system::error_code e) { active_connections.push_back(endpoint); mySocks.push_back(sock); std::cout << "Client newly accepted on: " << *endpoint << std::endl; }); acceptingCounter++; } if (active_connections.size() > 0) { if (!reading){ for (tcp::socket * s : mySocks){ reading = true; s->async_read_some(boost::asio::buffer(message_buffer), [&message_buffer,s,&reading, mySocks](const boost::system::error_code &ec, std::size_t bytes_transferred) { //some completion code reading = false; } } } } io_context.poll(); io_context.restart(); //delete all endpoints and delete all sockets. } return 0; } 所以我在这里有一个服务器脚本,我似乎无法弄清楚为什么 async_read_some 完成代码永远不会运行。当我让我的客户端成功将数据发送到此套接字时,io_context.poll() 甚至使用 run() 似乎永远不会运行完成代码,或者异步操作永远不会被视为“已完成”,据我所知,因此它永远不会运行。 为什么它从未被视为已完成,套接字对象没有超出范围,甚至在套接字上使用阻塞 read() 时我也无法超越它并实际看到收到的数据?请注意,我确实有完成 lambda 函数,它实际上打印出来,它不仅被注释掉,如下所示,但没有显示任何内容。客户端肯定会发送数据,因为我没有收到错误代码,并且 async_send() 的完成处理程序在该端运行。我还检查了它是否正在接受并尝试通过查看远程端点在同一个套接字上读取,但它不起作用。 所以,您的代码存在很多问题。主要的一点似乎是它正在发挥作用。 我把它做成了独立的: 住在科里鲁 #include <array> #include <boost/asio.hpp> #include <iostream> using boost::asio::ip::tcp; using boost::system::error_code; int main() { int acceptingCounter = 0; std::array<char, 2048> message_buffer; boost::asio::io_context io_context; std::vector<tcp::endpoint*> active_connections; std::vector<tcp::socket*> mySocks; // Create a tcp::acceptor object to listen for new connections. // Initialised to listen on port 13. tcp::acceptor acceptor(io_context, tcp::endpoint(tcp::v4(), 1025)); bool reading = false; std::cout << "Accepting..." << std::endl; while (true) { std::cout << "Active connections: " << active_connections.size() << std::endl; std::cout << "Accepting counter: " << acceptingCounter << std::endl; if (acceptingCounter < 1) { tcp::socket* sock = new tcp::socket(io_context); tcp::endpoint* endpoint = new tcp::endpoint; // mySocks.push_back(sock); acceptor.async_accept( // *sock, *endpoint, [endpoint, &active_connections /*, &acceptingCounter*/, &mySocks, sock](error_code e) { std::cout << "Client newly accepted on: " << *endpoint << " (" << e.message() << std::endl; active_connections.push_back(endpoint); mySocks.push_back(sock); }); acceptingCounter++; } if (active_connections.size() > 0) { if (!reading) { for (tcp::socket* s : mySocks) { reading = true; s->async_read_some( boost::asio::buffer(message_buffer), [/*&message_buffer, s,*/ &reading, mySocks](error_code ec, size_t transferred) { std::cout << "Received: " << transferred << " bytes (" << ec.message() << ")" << std::endl; // some completion code reading = false; }); } } } io_context.run(); io_context.restart(); // delete all endpoints and delete all sockets. } } 通过 Coliru 或本地进行现场演示: 问题 你有内存泄漏,竞争条件,不必要的动态分配,使用原始的新/删除,但也 接受循环从不接受新连接 asio 的整个概念是抽象事件循环,你用大量的状态对其进行硬编码,就像你正在编写 C 风格的 epoll/select 代码一样。这意味着您甚至不能在单独的连接上并行进行两次读取。这与异步 IO 的目的背道而驰。 这是我的修复建议: [即将推出]
dio 类型“String”的问题不是类型转换中“Map<String, dynamic>”类型的子类型
我有列表视图任务和内部按钮来导航此任务的问题,但我无法显示此问题问题“dio 类型‘String’的问题不是‘Map 类型的子类型’ 我有列表视图任务和内部按钮来导航此任务的问题,但我无法显示此问题问题“dio 类型‘String’的问题不是类型转换中‘Map’类型的子类型” 我的仓库 import 'dart:convert'; import 'package:dio/dio.dart'; import 'package:questonnaire_app/data/models/survey_data_model.dart'; import 'package:questonnaire_app/data/models/tasks_data_model.dart'; import 'package:questonnaire_app/network/dio_settings.dart'; class GetTasksRepo { final Dio dio = DioSettings().dio; Future<TasksDataModel> getTasks() async { try { final Response responce = await dio .get('https://getquestionnairesendpoint-nfhw57yfsq-uc.a.run.app/'); if (responce.statusCode == 200) { final Map<String, dynamic> jsonResponse = jsonDecode(responce.data); return TasksDataModel.fromJson(jsonResponse); } else { throw Exception('Failed to load tasks'); } } catch (e) { print('Error $e'); rethrow; } } Future<SurveyDataModel> getTasksById(String id) async { try { final Response response = await dio.get( 'https://getquestionnairesendpoint-nfhw57yfsq-uc.a.run.app/?id=$id'); if (response.statusCode == 200) { print(response.data); final jsonResponse = response.data as Map<String, dynamic>; return SurveyDataModel.fromJson(jsonResponse); } else { throw Exception('Failed to load task by ID'); } } catch (e) { print('Error $e'); rethrow; } } } 调查模型 class SurveyDataModel { String? message; SurveyData? data; SurveyDataModel({this.message, this.data}); SurveyDataModel.fromJson(Map<String, dynamic> json) { message = json['message']; data = json['data'] != null ? SurveyData.fromJson(json['data']) : null; } Map<String, dynamic> toJson() { final Map<String, dynamic> data = <String, dynamic>{}; data['message'] = message; if (this.data != null) { data['data'] = this.data!.toJson(); } return data; } } class SurveyData { String? id; List<Pages>? pages; SurveyData({this.id, this.pages}); SurveyData.fromJson(Map<String, dynamic> json) { id = json['id']; if (json['pages'] != null) { pages = <Pages>[]; json['pages'].forEach((v) { pages!.add(Pages.fromJson(v as Map<String, dynamic>)); }); } } Map<String, dynamic> toJson() { final Map<String, dynamic> data = <String, dynamic>{}; data['id'] = id; if (pages != null) { data['pages'] = pages!.map((v) => v.toJson()).toList(); } return data; } } class Pages { String? question; String? type; String? image; List<String>? options; Pages({this.question, this.type, this.image, this.options}); Pages.fromJson(Map<String, dynamic> json) { question = json['question']; type = json['type']; image = json['image']; options = json['options'].cast<String>(); } Map<String, dynamic> toJson() { final Map<String, dynamic> data = <String, dynamic>{}; data['question'] = question; data['type'] = type; data['image'] = image; data['options'] = options; return data; } } My survey screen import 'package:flutter/material.dart'; import 'package:questonnaire_app/data/models/survey_data_model.dart'; import 'package:questonnaire_app/data/repositories/get_tasks_repo.dart'; class SurveyScreen extends StatefulWidget { final String surveyId; const SurveyScreen({super.key, required this.surveyId}); @override State<SurveyScreen> createState() => _SurveyScreenState(); } class _SurveyScreenState extends State<SurveyScreen> { late Future<SurveyDataModel> surveyDataModel; int currentPageIndex = 0; @override void initState() { super.initState(); surveyDataModel = GetTasksRepo().getTasksById(widget.surveyId); } void nextPage(int totalPages) { setState(() { if (currentPageIndex < totalPages - 1) { currentPageIndex++; } }); } void previousPage() { setState(() { if (currentPageIndex > 0) { currentPageIndex--; } }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text( 'Опросник', style: TextStyle( fontFamily: 'Nunito', fontWeight: FontWeight.w800, fontSize: 24, color: Color(0xff27272E), ), ), bottom: PreferredSize( preferredSize: const Size.fromHeight(1), child: Container( color: const Color(0xff8E8E93).withOpacity(0.08), height: 1.0, ), ), ), body: FutureBuilder<SurveyDataModel>( future: GetTasksRepo().getTasksById(widget.surveyId), builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return Center(child: CircularProgressIndicator()); } else if (snapshot.hasError) { return Center(child: Text('Error: ${snapshot.error}')); } else if (!snapshot.hasData || snapshot.data == null) { return Center(child: Text('Survey not found')); } else { final surveyData = snapshot.data; final currentPage = surveyData?.data?.pages?[currentPageIndex]; return currentPage == null ? Center(child: Text('No pages available')) : Padding( padding: EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( currentPage.question ?? "", style: TextStyle( fontFamily: "Nunito", fontWeight: FontWeight.w800, fontSize: 24, color: Color(0xff27272E), ), ), SizedBox( height: 16, ), if (currentPage.type == "multiple-choice") ListView.builder( shrinkWrap: true, itemCount: currentPage.options?.length ?? 0, itemBuilder: (context, index) { final option = currentPage.options![index]; return ListTile( title: Text(option), onTap: () {}, ); }, ), if (currentPage.type == "checkbox") ListView.builder( shrinkWrap: true, itemCount: currentPage.options?.length ?? 0, itemBuilder: (context, index) { final option = currentPage.options![index]; return CheckboxListTile( title: Text(option), value: false, onChanged: (bool? value) {}, ); }, ), if (currentPage.type == 'banner') Center( child: Image.network(currentPage.image ?? ""), ), Spacer(), ElevatedButton( onPressed: () {}, child: Text('Next'), ), ], ), ); } }, ), ); } } 我想按 id 显示调查(我的所有任务都有 id),点击我的任务后我想查看我的调查 使用 dio package 进行网络数据流传输时,无需对返回的数据(主体)进行解码,因为它纯粹是 json 格式。另一方面需要http来解码返回的数据。 因此,对于您的问题,只需直接从返回的数据(json)构造模型对象即可。 if (responce.statusCode == 200) { return TasksDataModel.fromJson(responce.data); }
发送方正在向接收方发送 N 个数据包。 我想要一个保证交付的协议或方法,每个数据包至少被接收一次。如果由于
我写了一个网站(NEXTJS + Node js + Express + Postgresql)。该网站将在 LAN 上运行。这就是为什么我通过 HTTPS 运行 Next js(前端)和 Nodejs(后端)端,现在它应该可以访问了...
从本地网络访问在 VPN 后面运行的 Docker-Compose 服务
我正在尝试使用 docker-compose、wireguard VPN、qbittorrent 客户端以及最终的 sonarr/radarr 在 debian linux 机器上设置 plex 服务器。 我在访问 qbittorrent UI 时遇到问题...
考虑以下客户端和服务器组件: 导入 java.io.InputStream; 导入java.io.IOException; 导入 java.net.HttpURLConnection; 导入java.net.URL; 公共类客户端{ 公开
谁能解释一下 GCP Vertex AI Pipeline 作业中的“reserved_ip_ranges”参数是什么?来自此文档:https://cloud.google.com/python/docs/reference/aiplatform/latest/google.cloud。
通过 OpenVPN 连接时 FTP 目录列表和反向 Shell 失败(Proving Grounds 实验室)
我正在练习一些 Proving Grounds 实验室,并且遇到了一个问题:我无法接收 FTP 服务的目录列表,但我可以成功连接并对其进行身份验证。错误...
我正在使用 Fedora 18 和 avahi 命令行工具(版本 0.6.31) 我使用 avahi-resolve-host-name 来发现子网上设备的 IP 地址,以便在开发过程中进行测试。 我
使用 NAT 和静态 IP 的 Google Cloud 作业中的传出(出口)流量问题
我编写了一个需要静态 IP 才能与 API 通信的服务。我按照 Google 的说明进行操作 https://cloud.google.com/run/docs/configuring/static-outbound-ip,事实上,...
如何判断SocketTimeoutException是否表示没有连接
我们有一个在gui应用程序中运行的服务器的改造java客户端,我们想在没有连接到服务器时通知用户,有一些明显的异常,例如ConnectException或