今天來寫一個簡單的tcp server.
使用net.Listen(),可以指定協定,這裡我們使用tcp,
以及傾聽的ip,port;這裡我們使用 50000.
Listen()會建立一個listener,
而listener可以透過Accept()函數,處理要求的連線,
這時候會建立一個connection.
我們將此connection傳送給透過 go指令建立的goroutine,
來與client溝通.
// hello58
// 一個簡單的 tcp server
package main
import (
"fmt"
"net"
)
func main() {
fmt.Println("大家好!我是一個簡單的 tcp server!已經啟動!")
// create listener:
listener, err := net.Listen("tcp", "localhost:50000")
if err != nil {
fmt.Println("Error listening ", err.Error())
return // terminate program
}
fmt.Println("可以透過 port 50000 傳送資料給我喔!")
// listen and accept connections from clients:
for {
conn, err := listener.Accept()
if err != nil {
fmt.Println("Error accepting ", err.Error())
return
}
go doServerStuff(conn)
}
}
func doServerStuff(conn net.Conn) {
for {
buf := make([]byte, 512)
_, err := conn.Read(buf)
if err != nil {
fmt.Println("Error reading ", err.Error())
return
}
fmt.Printf("接收到: %v", string(buf))
}
}
執行結果:
另啟termainal透過telent localhost 50000
./hello58
大家好!我是一個簡單的 tcp server!已經啟動!
可以透過 port 50000 傳送資料給我喔!
接收到: test1
接收到: test2
接收到: test3
就可以傳送資料給這個簡單的tcp server了.
接著再啟動一個termainal透過telent localhost 50000,
現在有兩個telnet要求連線了;
這次輸入 ping1 ping2
回到第一個telnet 輸入 test4
回到server的terminal,可以看到處理兩個連線依然正常運作.
./hello58
大家好!我是一個簡單的 tcp server!已經啟動!
可以透過 port 50000 傳送資料給我喔!
接收到: test1
接收到: test2
接收到: test3
接收到: ping1
接收到: ping2
接收到: test4