Go TCP

    這是一個go開發的tcp列子, 只是一個簡單, 由於沒有使用多線程, 只能接受客戶端的數據,而後將數據發給客戶端就退出了, 好了, 上代碼: android

代碼結構以下
go-tcp/
├── bin
│   └── main
├── pkg
└── src
    ├── main.go
    └── server
        └── tcpserver.go

4 directories, 3 files
main.go代碼
package main

import (
	"server"
	"log"
)

func main (){
	//server := new(server.TCPServer)
	//0:8080 = 至關於127.0.0.1:8080
	var s *server.TCPServer = server.NewTCPServer("0:8080")
	log.Println( (*s).Host, (s).Port)
}
tcpserver.go
package server

import (
	"log"
	"net"
)

type TCPServer struct {
	Host string
	Port int
	conn net.Conn
}

func NewTCPServer(address string) *TCPServer {
	server := new(TCPServer)
	//設置監聽IP和端口
	addr, err := net.ResolveTCPAddr("tcp4", address)
	server.Host, server.Port =  addr.IP.String() , addr.Port
	//listen
	listener, err := net.ListenTCP("tcp4", addr)
	if err != nil {
		log.Fatal("listenTCP ERROR:", err)
	}

	//accept
	conn, err := listener.Accept()
	if err != nil {
		log.Fatal(err)
	}
	//緩衝區
	buf := make([]byte, 100)
	//讀取數據
	cont, err := conn.Read(buf)
	if err == nil && cont > 0 {
		server.conn = conn
		//接受數據
		(*server).reciver(string(buf))
	}else{
		log.Println("read err")
	}
	return server
}

func (this TCPServer) reciver(data string) {
	log.Printf("=>%s", data)
	this.send(data)
}

func (this TCPServer) send(data string) {
	log.Printf("<=%s", data)
	//發送數據給客戶端
	this.conn.Write([]byte(data))
}
編譯代碼
GOPATH=`pwd` go build -o bin/main src/main.go
啓動服務
./bin/main
telnet連上服務器, 而且寫入數據,回車
gaojie@gaojie:/media/Java/android/workspace$ telnet 0 8080
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
你好啊
你好啊
Connection closed by foreign host.
服務器則顯示以下,就退出了.
2013/10/06 10:18:25 =>你好啊

2013/10/06 10:18:25 <=你好啊

2013/10/06 10:18:25 0.0.0.0 8080
相關文章
相關標籤/搜索