這是一個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