udp连接

服务端

package main

import (
	"fmt"
	"log"
	"net"
)
func main(){
	updaddr,err:=net.ResolveUDPAddr("udp","127.0.0.1:8003")//udp结构体
	if err != nil {
		log.Println("create udp is error")
	}
	UDPConn,err:= net.ListenUDP("udp",updaddr)//监听udp
	if err != nil {
		log.Println("create udp is error")
	}
	defer UDPConn.Close()

	buf:=make([]byte,4096)
	n,cAddr,err:=UDPConn.ReadFromUDP(buf)//读取

	fmt.Println(string(buf[:n]),cAddr)
	_,err=UDPConn.WriteToUDP([]byte("this is server info"),cAddr)//写入
	if err != nil {
		log.Println(err)
	}

}

客户端

package main

import (
	"fmt"
	"log"
	"net"
)

func main(){
	conn,err:= net.Dial("udp","127.0.0.1:8003")
	if err != nil {
		log.Println("is errors")
	}
	defer conn.Close()
	conn.Write([]byte("aaaaaaaaaaaaaaaaaaaaaaaaaaa"))
	buf:=make([]byte,4096)
	n,_:=conn.Read(buf)
	fmt.Println(string(buf[:n]))
}

udp传输文件

服务端

package main

import (
	"fmt"
	"log"
	"net"
	"os"
)
func reInfo(conn *net.UDPConn, fileName string){
	fd,_:= os.Create(fileName)
	defer fd.Close()
	defer conn.Close()
	buf:=make([]byte,4096)
	for {
		n,caddr,err:=conn.ReadFromUDP(buf)
		fmt.Println(n)
		if err != nil {
			fmt.Println("is error")
			return
		}
		if n == 0 {
			fmt.Println("finish end file content")
			return
		}

		fmt.Println("客户端",caddr,"内容:",string(buf[:n]))
		fd.Write(buf[:n])
	}
}
func main(){
	udpaddr,err:=net.ResolveUDPAddr("udp","127.0.0.1:8006")
	if err != nil {
		log.Println("udpaddr is error")
		return
	}
	UdpConn,err:=net.ListenUDP("udp",udpaddr)
	if err != nil {
		log.Println("conn is eroror")
	}
	buf:=make([]byte,1024)
	n,caddr,_:=UdpConn.ReadFromUDP(buf)
	fmt.Println(caddr)
	fileName:= string(buf[:n])

	reInfo(UdpConn,fileName)
}

客户端

package main

import (
	"fmt"
	"io"
	"log"
	"net"
	"os"
)

func sendConn(conn net.Conn, filePath string){
	defer conn.Close()
	buf:=make([]byte,4096)
	fd,_:= os.Open(filePath)
	for {
		n,err:=fd.Read(buf)
		if err == io.EOF {
			fmt.Println("read file is end")
			return
		}
		conn.Write(buf[:n])
	}
}

func main(){
	conn,err:= net.Dial("udp","127.0.0.1:8006")
	if err != nil {
		log.Println("conn is errors")
		return
	}
	lists:=os.Args
	if len(lists) != 2 {
		log.Println("is erros")
		return
	}
	filePath:= lists[1]
	fileInfo,err:=os.Stat(filePath)
	if err != nil {
		log.Println("is erros")
	}
	fileName:= fileInfo.Name()
	io.WriteString(conn,fileName)
	sendConn(conn,filePath)
}

posted on 2022-11-28 16:56  孤灯引路人  阅读(127)  评论(0编辑  收藏  举报

导航