go http启动应用程序
udpserver
udpserver 是go程序需要启动的程序
#include <iostream>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <thread>const int BUFFER_SIZE = 1024;int udpSocket;
struct sockaddr_in udpServerAddr, udpClientAddr;void udpServerThread() {socklen_t udpClientAddrLen = sizeof(udpClientAddr);char buffer[BUFFER_SIZE];while (true) {int n = recvfrom(udpSocket, buffer, BUFFER_SIZE, 0, reinterpret_cast<struct sockaddr*>(&udpClientAddr), &udpClientAddrLen);buffer[n] = '\0';std::cout << "Received from client: " << buffer << std::endl;sendto(udpSocket, buffer, n, 0, reinterpret_cast<struct sockaddr*>(&udpClientAddr), udpClientAddrLen);}
}int main() {// 创建 UDP 套接字udpSocket = socket(AF_INET, SOCK_DGRAM, 0);if (udpSocket < 0) {std::cerr << "Socket creation failed" << std::endl;return -1;}memset(&udpServerAddr, 0, sizeof(udpServerAddr));memset(&udpClientAddr, 0, sizeof(udpClientAddr));// 设置服务器地址信息udpServerAddr.sin_family = AF_INET;udpServerAddr.sin_addr.s_addr = INADDR_ANY;udpServerAddr.sin_port = htons(8081);// 绑定套接字到服务器地址if (bind(udpSocket, reinterpret_cast<const struct sockaddr*>(&udpServerAddr), sizeof(udpServerAddr)) < 0) {std::cerr << "Bind failed" << std::endl;return -1;}std::cout << "UDP server listening on port 8081..." << std::endl;// 启动 UDP 服务器线程std::thread serverThread(udpServerThread);// 主线程可以执行其他任务for (int i = 0; i < 10; ++i) {std::cout << "Main thread doing other task: " << i << std::endl;sleep(1);}// 等待 UDP 服务器线程结束(这里只是为了示例,实际应用中可能不会这样做)serverThread.join();close(udpSocket);return 0;
}
go示例程序
这是个比较简单的例子,启动go 的 http server以后立刻启动udpserver
package mainimport ("fmt""io""log""net/http""os/exec""strings"
)func handleRequest(w http.ResponseWriter, r *http.Request) {if r.URL.Path == "/restartUDP" {restartUDPServer()fmt.Fprintln(w, "UDP server restarted.")} else {fmt.Fprintln(w, "Hello, this is your HTTP server!")}
}func startUDPServer() {cmd := exec.Command("your_udp_server_executable_path")err := cmd.Start()if err!= nil {log.Fatal("Error starting UDP server:", err)}log.Println("UDP server started.")
}func restartUDPServer() {stopUDPServer()startUDPServer()
}func stopUDPServer() {// 根据实际情况确定如何停止 UDP 服务器进程,这里只是一个示例cmd := exec.Command("pkill", "your_udp_server_executable_name")err := cmd.Run()if err!= nil {log.Println("Error stopping UDP server:", err)}
}func main() {startUDPServer()http.HandleFunc("/", handleRequest)log.Println("Starting HTTP server on port 8080...")err := http.ListenAndServe(":8080", nil)if err!= nil {log.Fatal("Error starting HTTP server:", err)}
}
改进
改进上面的程序,启动以后发送udp给udpserver,这个代码在接收到/restartUDP的 HTTP 请求时,会重新启动 UDP 服务器,并发送一个测试消息给 UDP 服务器等待响应来确认启动成功。
package mainimport ("bufio""fmt""io""log""net""net/http""os/exec""sync""time"
)var udpConn net.Conn
var mutex sync.Mutexfunc handleRequest(w http.ResponseWriter, r *http.Request) {if r.URL.Path == "/restartUDP" {restartUDPServer()if waitForUDPServerResponse() {fmt.Fprintln(w, "UDP server restarted and response received.")} else {fmt.Fprintln(w, "UDP server restarted but no response received.")}} else {fmt.Fprintln(w, "Hello, this is your HTTP server!")}
}func startUDPServer() {cmd := exec.Command("your_udp_server_executable_path")err := cmd.Start()if err!= nil {log.Fatal("Error starting UDP server:", err)}log.Println("UDP server started.")var err errorudpConn, err = net.Dial("udp", "127.0.0.1:your_udp_port")if err!= nil {log.Fatal("Error connecting to UDP server:", err)}
}func restartUDPServer() {stopUDPServer()startUDPServer()
}func stopUDPServer() {mutex.Lock()if udpConn!= nil {err := udpConn.Close()if err!= nil {log.Println("Error stopping UDP server:", err)}udpConn = nil}mutex.Unlock()
}func waitForUDPServerResponse() bool {// 设置超时时间timeout := time.After(5 * time.Second)// 发送测试消息_, err := udpConn.Write([]byte("test"))if err!= nil {log.Println("Error sending UDP message:", err)return false}// 等待响应for {select {case <-timeout:return falsedefault:message, err := bufio.NewReader(udpConn).ReadString('\n')if err == nil && strings.TrimSpace(message)!= "" {return true}time.Sleep(100 * time.Millisecond)}}
}func main() {startUDPServer()http.HandleFunc("/", handleRequest)log.Println("Starting HTTP server on port 8080...")err := http.ListenAndServe(":8080", nil)if err!= nil {log.Fatal("Error starting HTTP server:", err)}
}
相关文章:
go http启动应用程序
udpserver udpserver 是go程序需要启动的程序 #include <iostream> #include <unistd.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <thread>const int BUFFER_SIZE 1024;int udpSocket; struct …...

Redis:概念、部署、配置、优化
目录 关系型数据库与非关系型数据库 关系型数据库 非关系型数据库 非关系型数据库存在的原因 Redis 概念 优点 Redis部署流程 初步设置 安装 初始化 初始化时指定的参数说明 Redis配置文件 修改监听地址 Redis远程连接 远程连接 测试服务端状态 redis-benchm…...
华为OD-D卷找座位
在一个大型体育场内举办了一场大型活动,由于疫情防控的需要,要求每位观众的必须间隔至少一个空位才允许落座。现在给出一排观众座位分布图,座位中存在已落座的观众,请计算出,在不移动现有观众座位的情况下,…...

Go sdk下载和配置环境变量
本文目录 SDK下载环境变量配置测试 SDK下载 下载地址:https://golang.google.cn/dl/ 更多版本,找到1.9.2 我是win10 64位的,我找到这个下载 下载之后解压,可以看到bin文件夹。 环境变量配置 我的电脑 -> 属性 -> 高级…...

qt的项目结构
目录 创建新的项目 第一个hell0程序,qt的项目结构 main函数 Widget头文件: pro文件 命名规范 QtCreator 常用快捷键 Qt里边绝大部分的类都是继承自QObject是一个顶层类 父子关系 Qt坐标系 QT常用API函数 对象树 信号和槽机制 自定义信号和槽 自定义信号…...

【NLP】文本特征处理:n-gram特征和文本长度规范
文章目录 1、本章目标2、n-gram特征2.1、概念2.2、举个例子2.3、代码 3、文本长度规范及其作用4、小结 🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法…...
ESP32人脸识别开发 ---partitions.csv配置的一些说明(五)
配置的文件在这个位置 esp-who/examples/esp32-s3-eye/partitions.csv factory, app, factory, 0x010000, 4000K, model, data, spiffs, , 3900K, (这个是语音相关的) nvs, data, nvs, , 16K, fr, data, ,…...

【学习笔记】Matlab和python双语言的学习(图论最短路径)
文章目录 前言一、图论基本概念示例 二、代码实现----Matlab三、代码实现----python总结 前言 通过模型算法,熟练对Matlab和python的应用。 学习视频链接: https://www.bilibili.com/video/BV1EK41187QF?p36&vd_source67471d3a1b4f517b7a7964093e6…...
vue.config.js 配置 devserve 配置
在 Vue CLI 项目中,devServer 配置用于设置开发服务器的行为。这包括了开发服务器的端口、主机名、是否开启 HTTPS、自动打开浏览器等设置,以及配置代理规则来解决跨域问题。 devServer 配置详解(version > 4.0.0) host: 设置开发服务器的主机地址&a…...

不入耳耳机什么牌子性价比高?五大年度必选款揭秘
和传统的入耳式耳机相比,开放式耳机采用的是不深入耳道的设计,佩戴舒适度更高,卫生健康,安全性也更高。同时音质表现也更加有空间感。想要体验开放式耳机带来的便利,就需要做好选购攻略,不入耳耳机什么牌子…...
SQL Zoo 6.The JOIN operation
以下数据均来自SQL Zoo 1.Modify it to show the matchid and player name for all goals scored by Germany. To identify German players, check for: teamid GER.(它以显示德国所有进球的比赛和球员名字,识别德国球员) SELECT matchid,player FROM goal where teamid GE…...
视频教程:Vue3移动端抽屉弹层组件实战
本教程演示了vue3的composition api实现的移动端h5抽屉弹层组件,录屏讲解包含了功能演示和具体的源码实现。 笔者相关教程: 使用tailwindcss轻松实现移动端rem适配Vue3.4双向绑定新特性:defineModel好用爱用 学习要点: 自定义…...
CSS 的 BFC(块级格式化上下文)
BFC是Block Formatting Context(块级格式化上下文)的缩写,是CSS中一个概念,用于描述页面上如何对元素进行布局。 BFC是一个独立的容器,它内部的元素不会受到外部容器的影响,同时它也会影响其内部元素的表现…...
【2023年】云计算金砖牛刀小试2
A场次题目:Openstack 平台部署与运维 control172.17.31.10compute172.17.31.20 compute任务1 私有云平台环境初始化 1.初始化操作系统 使用提供的用户名密码,登录竞赛云平台。根据表 1 中的 IP 地址规划,设置各服务器节点的 IP 地址,确保网络正常通信,设置控制节点主机名…...

python--将mysql建表语句转换成hive建表语句
1.代码 import json import sys import pymysqldef queryDataBase(tablename):# 连接数据库并查询列信息conn pymysql.connect(userroot, password123456, hosthadoop11)cursor conn.cursor()cursor.execute("SELECT column_name, data_type FROM information_schema.C…...
异步调用实践:Async,Future, TaskExecutor、EventListener
1. 异步调用概述 异步调用允许一个方法调用在不被当前线程阻塞的情况下继续执行,而调用者可以继续执行其他任务,直到异步操作完成。 在Spring Boot中,异步调用常用于提高应用的响应性和吞吐量,尤其是在处理长时间运行的任务时&a…...
Flask 异常处理
Flask 异常处理 使用 app.errorhandler 装饰器使用 app.handle_exception 装饰器使用 register_error_handler调试模式总结 在 Flask 应用中,异常处理是一个非常重要的部分,它可以帮助你管理运行时错误,提供友好的错误页面,以及记…...

【海思SS626 | 内存管理】海思芯片的OS内存、MMZ内存设置
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...

linux crontab没有按照规则执行排查
配置了cron规则,但是一段时间后任务没有按预期执行,记录一次修复过程 检查crond服务 systemctl status crond规则正常 crontab -l脚本有执行权限 查看日志 第一种:journalctl journalctl -u crond | grep 03:00 -C 3-u 指定crond.serv…...
Cloudflare的D1使用技巧
总文档:https://developers.cloudflare.com/workers/wrangler/commands/#d1查询某个数据库中哪些命令占用资源最大: To find top 10 queries by execution count: npx wrangler d1 insights <database_name> --sort-typesum --sort-bycount --co…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...