1. <pre style="margin-top: 0px; margin-bottom: 0px;"><span style=" color:#0000ff;">package</span><span style=" color:#f57900;"> </span>main
  1.  
  1. import (
  1.     "fmt"
  1.     "net"
  1.     "time"
  1. )
  1.  
  1. func main() {
  1.     udpaddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:1789")
  1.     if err != nil {
  1.         fmt.Println(err)
  1.         return
  1.     }
  1.     lis, err := net.ListenUDP("udp", udpaddr)
  1.     if err != nil {
  1.         fmt.Println(err)
  1.         return
  1.     }
  1.     defer lis.Close()
  1.     for {
  1.         buf := make([]byte, 512)
  1.         n, addr, err := lis.ReadFromUDP(buf)
  1.         if err != nil {
  1.             fmt.Println(err)
  1.             continue
  1.         }
  1.         str := string(buf[:n])
  1.         go func(lis *net.UDPConn, addr *net.UDPAddr, body string) {
  1.             lis.WriteToUDP([]byte(body), addr)
  1.             time.Sleep(3e9)
  1.         }(lis, addr, str)
  1.     }
  1. }
  1.  
  1.  
  1. package main
  2.  
  3. import (
  4. "bytes"
  5. "encoding/json"
  6. "fmt"
  7. "io"
  8. "net"
  9. "os"
  10. )
  11.  
  12. type Fileinfo struct {
  13. Name string
  14. Path string
  15. }
  16.  
  17. func server() {
  18. laddr := &net.UDPAddr{IP: []byte{127, 0, 0, 1}, Port: 1789}
  19. con, err := net.ListenUDP("udp", laddr)
  20. if err != nil {
  21. fmt.Println(err)
  22. return
  23. }
  24. defer con.Close()
  25. for {
  26. Buf := make([]byte, 1024)
  27. n, raddr, _ := con.ReadFromUDP(Buf)
  28. var info Fileinfo
  29. json.Unmarshal(Buf[:n], &info)
  30. if info.Name != "" {
  31. if info.Path != "" {
  32. e := os.Chdir(info.Path)
  33. if e != nil {
  34. con.WriteTo([]byte(e.Error()), raddr)
  35. continue
  36. }
  37. }
  38. con.WriteToUDP([]byte("OK"), raddr)
  39. File, _ := os.Create(info.Name)
  40. defer File.Close()
  41. for {
  42. Buf := make([]byte, 4096)
  43. n, r, _ := con.ReadFromUDP(Buf)
  44. if r.String() != raddr.String() {
  45. continue
  46. }
  47. if n == 4 && bytes.Contains([]byte{0, 69, 79, 70}, Buf[:n]) {
  48. File.Sync()
  49. File.Close()
  50. break
  51. }
  52. File.Write(Buf[:n])
  53. }
  54. }
  55. }
  56. }
  57.  
  58. func client() {
  59. con, e := net.Dial("udp", "127.0.0.1:1789")
  60. if e != nil {
  61. fmt.Println(e)
  62. return
  63. }
  64. defer con.Close()
  65. var info Fileinfo = Fileinfo{Name: "WinMD5.exe", Path: "D:"}
  66. b, _ := json.Marshal(info)
  67. con.Write([]byte(b))
  68. Buf := make([]byte, 1024)
  69. n, _ := con.Read(Buf)
  70. if string(Buf[:n]) == "OK" {
  71. File, _ := os.Open("3.go")
  72. for {
  73. Buf := make([]byte, 4096)
  74. n, e := File.Read(Buf)
  75. if e != nil {
  76. if e == io.EOF {
  77. break
  78. }
  79. fmt.Println(e)
  80. break
  81. }
  82. con.Write(Buf[:n])
  83. }
  84. con.Write([]byte{0, 69, 79, 70})
  85. }
  86. }

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. Liunx搜索命令行

    1.grep grep(General Regular Expression Parser,通用规则表达式分析程序)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. 它的使 ...

  2. 利用@factory和@dataProvider实现参数化

    利用构造函数将要用的的参数初始化,非常有利于简化脚本.它将外部的数据赋给本地的变量,可以使得初始化后的参数被其他方法使用.直接上代码: private String url;    private S ...

  3. Analyzing resource wait related to memory/IO bottleneck

    Analyzing resource wait related to memory bottleneck (RESOURCE_SEMAPHORE, PAGEIOLATCH_XX) sys.dm_os_ ...

  4. MessageDigest的功能及用法(加密解密)

    MessageDigest的功能及用法 MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法.信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度 ...

  5. lua队列实现

    Queue = {} function Queue.newquene() } end function Queue.push(queue, value) queue.count = queue.cou ...

  6. 1) 十分钟学会android--建立第一个APP,创建android项目

    一个Android项目包含了所有构成Android应用的源代码文件. 本小节介绍如何使用Android Studio或者是SDK Tools中的命令行来创建一个新的项目. Note:在此之前,我们应该 ...

  7. vs添加浏览器

    点击桌面谷歌图标,查看属性,赋值全部地址 在vs中,直接添加,把地址复制进去就ok了

  8. dbcp相关配置

    最近在看一些dbcp的相关内容,顺便做一下记录,免得自己给忘记了.   1. 引入dbcp (选择1.4) <dependency> <groupId>com.alibaba. ...

  9. apache出现You don't have permission to access / on this server提示的解决方法

    在apache的配置文件httpd.conf里定义了对网站根默认的访问权限 #<Directory />    Options FollowSymLinks    AllowOverrid ...

  10. 统计之都 http://cos.name/

    http://cos.name/ IMS:一个洲际人际交流网络(为学生免费提供会员资格) 原文链接:http://cos.name/2014/07/ims-a-cross-continent-huma ...