<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. React-Native Android开发沉思录

    在runServer.js中有声明如何启动http服务: 查看端口占用情况 而且在系统管理器中,根本找不到PID为7956的应用,那能更改端口吗?在server.js中有声明: module.expo ...

  2. BZOJ 1443 二分图博弈 网络流

    思路: 二分图博弈嘛 找到最大匹配的必须点 跑个网络流 前后DFS一遍 //By SiriusRen #include <queue> #include <cstdio> #i ...

  3. Kettle 版本及使用问题

    kettle 简介 Kettle也叫PDI (Pentaho Data Intergration) Kettle 版本及下载 7.1及更早版本: https://sourceforge.net/pro ...

  4. UI常用网站

    网站大全 国外的花瓣--Pinterest • The world’s catalog of ideas 字体海洋--求字体网提供中文和英文字体库下载.识别与预览服务,找字体的好帮手 原创设计UI-- ...

  5. GCC编译步骤

    gcc -E t1.c -o t1.i 预处理gcc -S t1.i -o t1.s 转成汇编语言gcc -c t1.s -o t1.o 转成机器码gcc t1.o -o t1.exe 链接 直接使用 ...

  6. 在webstrorm中配置好es6 babel【更新:在webstorm中配置.vue和.vue文件中支持es6】

    第一步:全局安装babel-cli npm install -g babel-cli 第二步,新建一个空项目,在 WebStorm 中的当前项目中打开 Terminal,进入项目的根目录下, 安装 E ...

  7. MySQL 5.6 Reference Manual-14.6 InnoDB Table Management

    14.6 InnoDB Table Management 14.6.1 Creating InnoDB Tables 14.6.2 Moving or Copying InnoDB Tables to ...

  8. PHP中的字符串类型

    PHP支持两种类型的字符串,这些字符串用引号说明. 1.如果希望赋值一个字面意义的字符串,精确保存这个字符串的内容,应该用单引号标注,例如: $info='You are my $sunshine'; ...

  9. Openwrt PPTP Server笔记

    1.安装PPTP opkg updateopkg install kmod-mppeopkg install pptpd 2./etc/pptpd.conf option /etc/ppp/optio ...

  10. Oracle中的SAVEPOINT

    学习存储过程中使用断点回滚事务时,发现目前网络上存在一个问题,那就是使用断点回滚后,都忘记了一个很重要的事情,提交事务.虽然使用了断点回滚,但是断点回滚不像rollBack或commit一样结束当前事 ...