Go语言中的UDP应用
Go语言中的UDP应用
Go语言中使用UDP是很方便的,net包提供了UDP和TCP的功能,这里使用UDP做了一个UDP广播,然后接收各个设备的返回信息。实现起来很快,总体感觉比使用C#中的UDP更优雅,简洁。
package main
import (
"fmt"
"net"
"time"
"strings"
"reflect"
)
func recvUDPMsg(conn *net.UDPConn){
fmt.Println("进入了")
for{
var buf [1024] byte
n, raddr, err := conn.ReadFromUDP(buf[0:])
if err != nil{
fmt.Println(err)
return
}
content := string(buf[0:n])
hmis := strings.Split(content, ",")
hmi := new(HMIModel)
hmi.ReflectInfo(hmis)
fmt.Println(hmi)
_, err = conn.WriteToUDP([]byte("hello world"), raddr)
if err != nil {
fmt.Println(err)
}
}
}
type HMIModel struct{
company string
ip string
hostname string
pncode string
versoft string
projectname string
}
func (this HMIModel) ReflectInfo(hmis []string){
f := reflect.TypeOf(this)
v := reflect.ValueOf(this)
for i := 0; i < f.NumField(); i++{
for j := 0; j < len(hmis); j++{
contents := strings.Split(hmis[i], "=")
if contents[0] == f.Field(i).Name{
v.Field(i).SetString(contents[1])
break
}
}
}
}
func main(){
fmt.Println("开始了")
udp_addr, err := net.ResolveUDPAddr("udp", "192.168.200.221:1100")
if err != nil{
fmt.Println(err)
return
}
conn, err := net.ListenUDP("udp", udp_addr)
if err != nil {
fmt.Println(err)
return
}
go recvUDPMsg(conn)
raddr := net.UDPAddr{
IP: net.ParseIP("255.255.255.255"),
Port: 3366,
}
for{
conn.WriteToUDP([]byte("hello world"), &raddr)
time.Sleep(3 * time.Second)
}
}
Go语言中的UDP应用的更多相关文章
- C语言中,头文件和源文件的关系(转)
简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句, ...
- C 语言中 setjmp 和 longjmp
在 C 语言中,我们不能使用 goto 语句来跳转到另一个函数中的某个 label 处:但提供了两个函数——setjmp 和 longjmp来完成这种类型的分支跳转.后面我们会看到这两个函数在处理异常 ...
- c语言中的scanf在java中应该怎么表达,Scanner类。
1 java是面向对象的语言 它没有像C语言中的scanf()函数,但是它的类库中有含有scanf功能的函数 2 java.util包下有Scanner类 Scanner类的功能与scanf类似 3 ...
- C语言中do...while(0)的妙用(转载)
转载来自:C语言中do...while(0)的妙用,感谢分享. 在linux内核代码中,经常看到do...while(0)的宏,do...while(0)有很多作用,下面举出几个: 1.避免goto语 ...
- C语言中,定义的含义?声明的含义?它们之间的区别是什么?
在C语言中,对于定义和声明,也许我们非常的熟悉,但不一定真正的了解! 定义的含义:所谓定义,就是创建(编译器)一个对象,为这个对象分配一块内存空间并取名,也就是我们平常所说的变量名或对象名,一旦这个名 ...
- C++中函数的默认参数和C语言中volatile的学习
1.函数默认参数 1 int func(int a,int b=10) 2 { 3 return a*b; 4 } 5 6 int main() 7 { 8 int c=func(2); 9 cout ...
- C语言中qsort函数用法
C语言中qsort函数用法-示例分析 本文实例汇总介绍了C语言中qsort函数用法,包括针对各种数据类型参数的排序,非常具有实用价值非常具有实用价值. 分享给大家供大家参考.C语言中的qsort ...
- c语言中time相关函数
工作中遇到的函数: int seed = time(NULL); srand(seed); signal(SIGINT, stop); signal(SIGUSR1, sig_usr1); 搜time ...
- C语言中的static 详细分析
转自:http://blog.csdn.net/keyeagle/article/details/6708077/ google了近三页的关于C语言中static的内容,发现可用的信息很少,要么长篇大 ...
随机推荐
- C# 中关于radiobutton控件的使用
在一个Form窗口中定义了3个radiobutton,radioButton1.radioButton2和radioButton3,以及button1和button2(这里可以是其他控件) 为了实现单 ...
- 初识EMC
EMC,即电磁兼容,是指设备在预期的电磁环境中,能按设计要求正常抵抗电磁干扰的能力.其主要包含3个方面:电磁干扰(EMI),电磁抗扰(EMS)与静电放电抗扰(ESD). 电磁干扰的方式可以大概分为传导 ...
- select poll epoll相关知识速记
缘起 面试的时候经常被问的一个很蛋疼的问题,经常被问,但是知识很零散,难记忆,看完就忘 select 作用 可以监视文件描述符是否可以读写,要求监视的文件描述符是非阻塞的 诞生背景 产生与上个世纪80 ...
- IOS CoreLocation框架的使用(用于地理定位)
● 在移动互联网时代,移动app能解决用户的很多生活琐事,比如 ● 导航:去任意陌生的地方 ● 周边:找餐馆.找酒店.找银行.找电影院 ● 在上述应用中,都用到了地图和定位功能,在iOS开发中 ...
- IOS 多媒体 使用总结
一.音频播放 1.音效播放(短时间的音频文件)1> AudioServicesCreateSystemSoundID2> AudioServicesPlaySystemSound 2.音乐 ...
- note02-计算机网络
2.物理层 通信系统模型(源->发送器->XXX->接收器->终),源发出数字信号,调制器编码为模拟信号,进行传输,解调器解码模拟信号为数字信号给终 信噪比,香农公式,C=B ...
- 【[POI2000]病毒】
\(Ac\)自动机好题了 这个题要求我们一直无法匹配到结束标记,所以我们直接在\(trie\)图上找到一个环,这个环可以被根节点到达,之后还没有结束标记 发现自己不会\(dfs\)找环,于是直接莽上\ ...
- POJ 2299 【树状数组 离散化】
题目链接:POJ 2299 Ultra-QuickSort Description In this problem, you have to analyze a particular sorting ...
- flume ng 1.3 安装(转)
http://blog.csdn.net/hijk139/article/details/8308224 业务系统需要收集监控系统日志,想到了hadoop的flume.经过试验,虽说功能不算足够强大, ...
- android(eclipse)新手常见问题总结(一)
1:jdk无法更新 进入工具里面手动获取镜像资源 并且改为强制 2:报错:This version of the rendering library is more recent than you ...