<pre style="margin-top: 0px; margin-bottom: 0px;"><span style=" color:#0000ff;">package</span><span style=" color:#f57900;"> </span>main

import (
    "fmt"
    "net"
    "time"
)

func main() {
    udpaddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:1789")
    if err != nil {
        fmt.Println(err)
        return
    }
    lis, err := net.ListenUDP("udp", udpaddr)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer lis.Close()
    for {
        buf := make([]byte, 512)
        n, addr, err := lis.ReadFromUDP(buf)
        if err != nil {
            fmt.Println(err)
            continue
        }
        str := string(buf[:n])
        go func(lis *net.UDPConn, addr *net.UDPAddr, body string) {
            lis.WriteToUDP([]byte(body), addr)
            time.Sleep(3e9)
        }(lis, addr, str)
    }
}


package main

import (
"bytes"
"encoding/json"
"fmt"
"io"
"net"
"os"
) type Fileinfo struct {
Name string
Path string
} func server() {
laddr := &net.UDPAddr{IP: []byte{127, 0, 0, 1}, Port: 1789}
con, err := net.ListenUDP("udp", laddr)
if err != nil {
fmt.Println(err)
return
}
defer con.Close()
for {
Buf := make([]byte, 1024)
n, raddr, _ := con.ReadFromUDP(Buf)
var info Fileinfo
json.Unmarshal(Buf[:n], &info)
if info.Name != "" {
if info.Path != "" {
e := os.Chdir(info.Path)
if e != nil {
con.WriteTo([]byte(e.Error()), raddr)
continue
}
}
con.WriteToUDP([]byte("OK"), raddr)
File, _ := os.Create(info.Name)
defer File.Close()
for {
Buf := make([]byte, 4096)
n, r, _ := con.ReadFromUDP(Buf)
if r.String() != raddr.String() {
continue
}
if n == 4 && bytes.Contains([]byte{0, 69, 79, 70}, Buf[:n]) {
File.Sync()
File.Close()
break
}
File.Write(Buf[:n])
}
}
}
} func client() {
con, e := net.Dial("udp", "127.0.0.1:1789")
if e != nil {
fmt.Println(e)
return
}
defer con.Close()
var info Fileinfo = Fileinfo{Name: "WinMD5.exe", Path: "D:"}
b, _ := json.Marshal(info)
con.Write([]byte(b))
Buf := make([]byte, 1024)
n, _ := con.Read(Buf)
if string(Buf[:n]) == "OK" {
File, _ := os.Open("3.go")
for {
Buf := make([]byte, 4096)
n, e := File.Read(Buf)
if e != nil {
if e == io.EOF {
break
}
fmt.Println(e)
break
}
con.Write(Buf[:n])
}
con.Write([]byte{0, 69, 79, 70})
}
}

GO语言UDP小笔记的更多相关文章

  1. Go语言阅读小笔记,来自知呼达达关于unsafe.Pointer的分享.

    第一式 - 获得Slice和String的内存数据 func stringPointer(s string) unsafe.Pointer { p := (*reflect.StringHeader) ...

  2. # C语言假期学习笔记——6

    C语言假期学习笔记--6 数组 主要学习了一位数组和二维数组. 数组是一组具有相同类型的变量的集合.C语言程序通过元素的下标来访问数组中的元素.(下标从0开始) 一位数组 类型 数组名[元素个数] 二 ...

  3. C语言细节总结笔记

    C语言细节总结笔记 */--> C语言细节总结笔记 Table of Contents 1. 三步异或法交换数字 2. 做差法交换数字 3. 按n位置位 4. 求余求商求积 5. 辗除法求最大公 ...

  4. Swift语言 1小时速学教程

    本文由 张渊杰 (网名寂静)编写 Swift语言 1小时速学教程 写在前面的话 有些人可能想, 呵呵, 1小时学一门语言, 你不是搞笑吧, 我想说, 是的, 完全可以, 就要看你怎么学了 要想在1小时 ...

  5. 嵌入式C语言优化小技巧

    嵌入式C语言优化小技巧 1 概述 嵌入式系统是指完成一种或几种特定功能的计算机系统,具有自动化程度高,响应速度快等优点,目前已广泛应用于消费电子,工业控制等领域.嵌入式系统受其使用的硬件以及运行环境的 ...

  6. 转:【iOS开发每日小笔记(十一)】iOS8更新留下的“坑” NSAttributedString设置下划线 NSUnderlineStyleAttributeName 属性必须为NSNumber

    http://www.bubuko.com/infodetail-382485.html 标签:des   class   style   代码   html   使用   问题   文件   数据 ...

  7. 小笔记:Timer定时间隔时间操作

    小笔记:Timer定时间隔时间操作,后面有时间再补充和完善: public class TimingSvc { /// <summary> /// 定时器,执行定时任务 /// </ ...

  8. 关于 linux中TCP数据包(SKB)序列号的小笔记

    关于  SKB序列号的小笔记 为了修改TCP协议,现在遇到了要改动tcp分组的序列号,但是只是在tcp_sendmsg函数中找到了SKB的end_seq  一直没有找到seq 不清楚在那里初始化了,就 ...

  9. Linux下postgres9.4 版本的单机版安装小笔记

    1.添加RPMyum install https://download.postgresql.org/pub/repos/yum/9.4/redhat/rhel-7-x86_64/pgdg-redha ...

随机推荐

  1. js 获取现在时间一个月(N天)后的日期

    欢迎加入前端交流群交流知识&&获取视频资料:749539640 let today = new Date().getTime() let lastDay = getTimeByDay( ...

  2. 写个js动态调整图片宽高 (原创)

    <body style="TEXT-ALIGN: center;"> <div id="testID" style="backgro ...

  3. FZU2150 Fire Game

    题目: 两个熊孩子在n*m的平地上放火玩,#表示草,两个熊孩子分别选一个#格子点火,火可以向上向下向左向右在有草的格子蔓延,点火的地方时间为0,蔓延至下一格的时间依次加一.求烧完所有的草需要的最少时间 ...

  4. Meson使用

    安装 Meson是基于python3实现,至少需要python3.5才能运行,默认采用ninja作为后端.在Ubuntu下最简单的是通过pip3安装 $ sudo apt-get install py ...

  5. Keras简单使用

    Keras简单使用在keras中建立模型测试自己的图片一些有用的函数(持续更新) Keras简单使用 在keras中建立模型 相对于自己写机器学习相关的函数,keras更能快速搭建模型,流程如下: 通 ...

  6. Java中Calendar(日历)相关API举例

    Java中Calendar(日历)相关API举例,实现功能:输入一个年份和月份打印出这个月的日历. package calendarPrint; import java.util.Calendar; ...

  7. 软件需求规范说明 (Software Requirements Specification, 简称SRS)

    GB/T 9385-2008 笔记 为了形成确定和完备的规格说明, 我们需要明确 软件的顾客希望得到什么; 软件的供方理解用户想要什么; 4.2 SRS的基本性质 SRS是对在具体环境中执行确定功能的 ...

  8. window下安装svn

    下载 http://subversion.apache.org/ 注意:上边的黑窗口不要关闭! 如何校验svn服务有运行

  9. 【华科考研机试题】最长&最短文本

    题目 输入多行字符串,请按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出. 解题思路 1.输入所有字符串(有空格不另算字符串). 2.将char*字符串转换成s ...

  10. (转载) IaaS, PaaS, Saas

    如果你是一个网站站长,想要建立一个网站.不采用云服务,你所需要的投入大概是:买服务器,安装服务器软件,编写网站程序. 现在你追随潮流,采用流行的云计算,如果你采用 IaaS 服务,那么意味着你就不用自 ...