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)
}