TCP、UDP测试程序
package main
import (
"bufio"
"fmt"
"net"
)
/**
使用Go本身支持的http包构建http服务器。
*/
func main() {
testClient("tcp","requestMessage","8021")
testClient("udp","requestMessage","8031")
}
func testClient(connectType string,req string,port string) {
conn, err := net.Dial(connectType, "127.0.0.1:"+port)
if err != nil {
// handle error
}
fmt.Fprintln(conn,req);
status, err := bufio.NewReader(conn).ReadString('\n')
fmt.Println(status)
}
服务端程序
package main
import (
"fmt"
"gateway/src/main/handle"
"net"
"net/http"
"os"
"os/exec"
"path/filepath"
"strings"
)
/**
使用Go本身支持的http包构建http服务器。
*/
func main() {
go createServer("tcp", ":8021")
addr, err := net.ResolveUDPAddr("udp", ":8031")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
conn, err := net.ListenUDP("udp", addr)
if err != nil {
// handle error
}
defer conn.Close()
for {
// Here must use make and give the lenth of buffer
data := make([]byte, 1024)
_, rAddr, err := conn.ReadFromUDP(data)
if err != nil {
fmt.Println(err)
continue
}
udpReq := string(data)
fmt.Println("Received:", udpReq)
udpRes := strings.ToUpper(udpReq)
_, err = conn.WriteToUDP([]byte(udpRes), rAddr)
if err != nil {
fmt.Println(err)
continue
}
fmt.Println("Send:", udpRes)
}
}
func createServer(connType string, port string) {
ln, err := net.Listen(connType, port)
if err != nil {
// handle error
}
for {
conn, err := ln.Accept()
if err != nil {
// handle error
}
go doServerStuff(conn)
}
}
func doServerStuff(conn net.Conn) {
for {
buf := make([]byte, 512)
len, err := conn.Read(buf)
if err != nil {
fmt.Println("Error reading", err.Error())
return //终止程序
}
fmt.Printf("Received data: %v\n", string(buf[:len]))
resLen, resErr := conn.Write([]byte("Server Response"))
if resErr != nil {
fmt.Println("Error writing", resLen, resErr.Error())
return //终止程序
}
conn.Close()
}
}