wangshubo1989的博客

一蓑烟雨任平生 也无风雨也无晴

Go实战--实现一个简单的tcp服务端和客户端(The way to go)

生命不止,继续 go go go !!!

之前介绍了go为我们提供的net/http包,很方便的创建一些api。

今天就来点实战,写一个简单的tcp的服务端、客户端程序。

按照国际惯例,还是先介绍一点点基础知识。

* net.Listen*
Listen announces on the local network address laddr. The network net must be a stream-oriented network: “tcp”, “tcp4”, “tcp6”, “unix” or “unixpacket”. For TCP and UDP, the syntax of laddr is “host:port”, like “127.0.0.1:8080”. If host is omitted, as in “:8080”, Listen listens on all available interfaces instead of just the interface with the given host address. See Dial for more details about address syntax.

Listening on a hostname is not recommended because this creates a socket for at most one of its IP addresses.

func Listen(net, laddr string) (Listener, error)

所以我们的server端就可以这么写:

ln, _ := net.Listen("tcp", "localhost:8081")

bufio.NewReader
NewReader returns a new Reader whose buffer has the default size.

func NewReader(rd io.Reader) *Reader

Write

func (c *IPConn) Write(b []byte) (int, error)

Write implements the Conn Write method.

net.Dial

func (d *Dialer) Dial(network, address string) (Conn, error)

Dial connects to the address on the named network.

See func Dial for a description of the network and address parameters.


基础知识介绍差不多了,下面我们开始写代码了。
tcp_server.go

package main

import "net"
import "fmt"
import "bufio"
import "strings" 

func main() {

    fmt.Println("Launching server...")

    // listen on all interfaces
    ln, _ := net.Listen("tcp", "localhost:8081")

    // accept connection on port
    conn, _ := ln.Accept()

    // run loop forever (or until ctrl-c)
    for {
        // will listen for message to process ending in newline (\n)
        message, _ := bufio.NewReader(conn).ReadString('\n')
        // output message received
        fmt.Print("Message Received:", string(message))
        // sample process for string received
        newmessage := strings.ToUpper(message)
        // send new string back to client
        conn.Write([]byte(newmessage + "\n"))
    }
}

tcp_client.go

package main

import "net"
import "fmt"
import "bufio"
import "os"

func main() {

    // connect to this socket
    conn, _ := net.Dial("tcp", "localhost:8081")
    for {
        // read in input from stdin
        reader := bufio.NewReader(os.Stdin)
        fmt.Print("Text to send: ")
        text, _ := reader.ReadString('\n')
        // send to socket
        fmt.Fprintf(conn, text + "\n")
        // listen for reply
        message, _ := bufio.NewReader(conn).ReadString('\n')
        fmt.Print("Message from server: "+message)
    }
}

这里写图片描述

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangshubo1989/article/details/70661583
文章标签: go tcp
个人分类: go
所属专栏: Go从不放弃到实战
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

Go实战--实现一个简单的tcp服务端和客户端(The way to go)

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭