iT邦幫忙

DAY 9
0

蠻可愛的 Golang系列 第 9

一個簡單的 tcp server

今天來寫一個簡單的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

上一篇
蠻可愛的 golang 8 初探網路程式撰寫
下一篇
一個簡單的 tcp client
系列文
蠻可愛的 Golang30

尚未有邦友留言

立即登入留言