服務端代碼如下:
package main
import (
"fmt"
"net"
"log"
"os"
"bytes"
)
func main() {
//建立socket,監聽端口
netListen, err := net.Listen("tcp", "127.0.0.1:9999")
CheckError(err)
defer func(l net.Listener) {
fmt.Println("關閉")
l.Close()
}(netListen)
Log("Waiting for clients")
for {
conn, err := netListen.Accept()
if err != nil {
continue
}
Log(conn.RemoteAddr().String(), " 連接配接成功請求位址")
go handleConnection(conn)
}
}
//處理連接配接
func handleConnection(conn net.Conn) {
buffer := make([]byte, 2048)
Log("走了處理請求")
for {
Log("走的次數")
n, err := conn.Read(buffer)
if err != nil {
Log(conn.RemoteAddr().String(), "連接配接錯誤的請求位址: ", err)
return
}
Log(conn.RemoteAddr().String(), "這是啥資料:\n", string(buffer[:n]))
if len(string(buffer[:n])) > 25 {
sender(conn)
}
}
}
func sender(conn net.Conn) {
Log("需要發送的xml")
var buffer bytes.Buffer
//var sl []string
buffer.WriteString("<?xml version=\"1.0\" encoding=\"GBK\"?>")
buffer.WriteString("<message>")
buffer.WriteString("<head>")
buffer.WriteString("<field name=\"ReceiveTime\">112823</field>")
buffer.WriteString("<field name=\"ReceiveDate\">20151101</field>")
buffer.WriteString("</head>")
buffer.WriteString("<body>")
buffer.WriteString("<field name=\"Host\">20151101</field>")
buffer.WriteString("</body>")
buffer.WriteString("</message>")
Log(buffer.Bytes())
Log("位址為===" + conn.RemoteAddr().String())
//conn.Write([]byte(strings.Join(sl, "")))
//-->使用數組的形式 得到byte也行 隻不過看着沒buffer這樣的好
// ar := []byte {1, 1,1, 1}
//for i:= 0;i< len(buffer.Bytes()); i++ {
// ar = append(ar,buffer.Bytes()[i])
//}
//Log(ar)
Log(buffer.String())
conn.Write(buffer.Bytes())
Log("send over")
}
func Log(v ...interface{}) {
log.Println(v...)
}
func CheckError(err error) {
if err != nil {
fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
os.Exit(1)
}
}
用戶端代碼如下:
package main
import (
"fmt"
"net"
"os"
)
func sender(conn net.Conn) {
words := "hello world!hello world!"
conn.Write([]byte(words))
fmt.Println("send over")
}
func main() {
server := "127.0.0.1:9999"
tcpAddr, err := net.ResolveTCPAddr("tcp4", server)
if err != nil {
fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
os.Exit(1)
}
conn, err := net.DialTCP("tcp", nil, tcpAddr)
if err != nil {
fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
os.Exit(1)
}
fmt.Println("connect success")
sender(conn)
buffer := make([]byte, 2048)
n, err := conn.Read(buffer)
fmt.Println(string(buffer[:n]))
}