<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. 【撸码caffe 一】syncedmen.hpp

    SyncedMemory类主要负责在主机(CPU)和设备(GPU)之间管理内存分配和数据同步工作,封装了CPU和GPU之间的数据交互操作. 补充一点GPU的相关知识: 对CUDA架构而言,主机端的内存 ...

  2. 【联系】二项分布的对数似然函数与交叉熵(cross entropy)损失函数

    1. 二项分布 二项分布也叫 0-1 分布,如随机变量 x 服从二项分布,关于参数 μ(0≤μ≤1),其值取 1 和取 0 的概率如下: {p(x=1|μ)=μp(x=0|μ)=1−μ 则在 x 上的 ...

  3. rehat7.X下postgresql 11编译安装

    文档目录结构: 一.准备 操作系统版本:rehat7.6 Postgresql:11.2 软件安装目录:/pgsql11/basedir 数据文件存放目录:/pgsql11data/ 11.2的下载地 ...

  4. Objective-C浮点数转化整数(向上取整、向下取整)

    Objective-C拓展了C,自然很多用法是和C一致的.比如浮点数转化成整数,就有以下四种情况. 1.简单粗暴,直接转化 float f = 1.5; int a; a = (int)f; NSLo ...

  5. winfrom控件——基本工具

    窗体事件:属性—事件—load(双击添加) 窗体加载完之后的事件: 删除事件:先将属性事件里挂号的事件名删掉(行为里的load)再删后台代码里的事件. 控件:工具箱里(搜索—双击或点击拖动到窗体界面) ...

  6. Android开发笔记(7)——Intent启用应用软件

    转载请注明:http://www.cnblogs.com/igoslly/p/6844154.html Intent启用应用软件 intent可以用来要求其他应用组件完成特定工作,如相机.电话.地图等 ...

  7. 【Oracle】Rman简介

    1.备份和恢复功能的用途: –保护数据 -介质故障 -用户错误 -应用程序错误 –数据保存和历史数据保留 –数据传输 2.典型的备份和恢复任务 –通过配置数据库实现可恢复 –定义备份计划 –对不同类型 ...

  8. HttpSampler进行模拟webservice接口

    webservice接口,使用HttpSampler进行模拟,注意点说明: 1. 2. 3. 4. 如果没有头信息,soap1.0的版本会返回错误body,如下, PS:soap1.2存在细微差别  

  9. CDR中是否有图层,如何调出图层面板?

    什么是图层?如果有点PS基础的同学,应该会非常清楚这个概念,它是构成图像的重要组成单位,许多效果可以通过对层的直接操作而得到,并在当前图层操作时候不会影响到其他图层,所以在绘图的过程中有着很重要的作用 ...

  10. Java中数组的反转

    public class ArrayDemo2 { public static void main(String[] args) { //定义一个数组存放元素 int[] arr3 = {10, 20 ...