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应用的更多相关文章

  1. C语言中,头文件和源文件的关系(转)

    简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句, ...

  2. C 语言中 setjmp 和 longjmp

    在 C 语言中,我们不能使用 goto 语句来跳转到另一个函数中的某个 label 处:但提供了两个函数——setjmp 和 longjmp来完成这种类型的分支跳转.后面我们会看到这两个函数在处理异常 ...

  3. c语言中的scanf在java中应该怎么表达,Scanner类。

    1 java是面向对象的语言 它没有像C语言中的scanf()函数,但是它的类库中有含有scanf功能的函数 2 java.util包下有Scanner类 Scanner类的功能与scanf类似 3 ...

  4. C语言中do...while(0)的妙用(转载)

    转载来自:C语言中do...while(0)的妙用,感谢分享. 在linux内核代码中,经常看到do...while(0)的宏,do...while(0)有很多作用,下面举出几个: 1.避免goto语 ...

  5. C语言中,定义的含义?声明的含义?它们之间的区别是什么?

    在C语言中,对于定义和声明,也许我们非常的熟悉,但不一定真正的了解! 定义的含义:所谓定义,就是创建(编译器)一个对象,为这个对象分配一块内存空间并取名,也就是我们平常所说的变量名或对象名,一旦这个名 ...

  6. 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 ...

  7. C语言中qsort函数用法

    C语言中qsort函数用法-示例分析    本文实例汇总介绍了C语言中qsort函数用法,包括针对各种数据类型参数的排序,非常具有实用价值非常具有实用价值. 分享给大家供大家参考.C语言中的qsort ...

  8. c语言中time相关函数

    工作中遇到的函数: int seed = time(NULL); srand(seed); signal(SIGINT, stop); signal(SIGUSR1, sig_usr1); 搜time ...

  9. C语言中的static 详细分析

    转自:http://blog.csdn.net/keyeagle/article/details/6708077/ google了近三页的关于C语言中static的内容,发现可用的信息很少,要么长篇大 ...

随机推荐

  1. March 28 2017 Week 13 Tuesday

    Never was anything great achieved without danger. 不经历风雨,又怎能见彩虹. After the rain, if there's the sunsh ...

  2. 一个查看UI5控件所有公有方法的小技巧

    一个很小的tip:比如我想把UI5表格控件里的每列设置成宽度根据显示的内容自适应,需要知道应该调用控件的哪个方法来实现. 一种办法当然是查SAP帮助文档,得知需要调用控件的公有方法setAutoSiz ...

  3. POJ-3484 Showstopper---二分+前缀和

    题目链接: https://cn.vjudge.net/problem/POJ-3484 题目大意: 给出一系列等差数列,给出第一项和最后一项和公差 这些等差数列中每个数出现的次数只有一个是奇数,找出 ...

  4. sst上传和下载码云

    第一次 Team-----share---->Add----->commit-------remote----->pull 第二次 直接share开始.

  5. ssh公钥

    想要将本地电脑的文件传到github上,必须要通过建立本地电脑与github帐号的ssh公钥才行. 方式: 用命令ssh-keygen产生ssh公钥(之后一直按回车就好),然后cd到~/.ssh目录, ...

  6. HashMap面试知识点

    HashMap的工作原理是近年来常见的Java面试题. 几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如 ...

  7. mysql复制表数据,多表数据复制到一张表

    对于mysql 复制表数据可以使用 insert into select 方式 示例: $sql="insert into icarzoo.provider(providerId,provi ...

  8. Python 学习笔记(四)数字(二)

    Python Python2 中除法的问题 >>> 3 / 6 0 >>> 3.0 / 6 0.5 >>> 3.0 / 6.0 0.5 >& ...

  9. 菜鸟崛起 DB Chapter 4 MySQL 5.6的数据库引擎

    数据库存储引擎是数据库底层的软件组件,我们平常看不到,但是却与我们操作数据库息息相关.DBMS使用数据引擎进行创建.查询.更新和删除数据操作.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能 ...

  10. Unity 游戏框架搭建 (十二) 简易AssetBundle打包工具(二)

    上篇文章中实现了基本的打包功能,在这篇我们来解决不同平台打AB包的问题. 本篇文章的核心api还是: BuildPipeline.BuildAssetBundles (outPath, 0, Edit ...