Go语言从入门到精通-04| Socket客户端与服务端

2020-07-08 00:00:00 数据 客户端 连接 建立 服务端
大家都知道Web服务是基于HTTP协议的,而HTTP协议又是TCP协议上的应用层协议。因此我们在开发一个Web服务之前,我们先介绍一下如何使用Go语言开发一个基于TCP的客户端与服务端程序(关于TCP协议的原理可以参考本号之前的文章《从socket到TCP协议,透彻理解网络编程》)。

程序比较简单,服务端用于等待客户端的连接,连接建立成功后,如果接到客户端的数据,则原封不动的返回相同的数据。客户端建立与服务端的连接,连接建立成功后向服务端发送字符串数据,并等待接收服务端的返回。

服务端

前面已经介绍,服务端用于等待客户端的连接,连接建立成功后,如果接到客户端的数据,则原封不动的返回相同的数据。如下是服务端的代码,监听的端口为8080。

package main

import (
    "fmt"
    "net"  //网络通信的库
    "os"
)

func main() {
	/* 构建服务端的地址,端口 */
    service := ":8080"
    tcpAddr, err := net.ResolveTCPAddr("tcp4", service)
    checkError(err)

    /* 建立对端口的监听 */
    listener, err := net.ListenTCP("tcp", tcpAddr)
    checkError(err)
    for {
        fmt.Println("begin accept")
        /* 等待客户端的连接 */
        conn, err := listener.Accept()
        if err != nil {
            continue
        }

        buf := make([]byte,1024)

        /* 读取客户端发送的数据,并打印 */
        result, err := conn.Read(buf)
        fmt.Println(result, string(buf))

        /* 将数据原封返回给客户端 */
        conn.Write(buf) 
        conn.Close()   
    }
}
func checkError(err error) {
    if err != nil {
        fmt.Fprintf(os.Stderr, 
                    "Fatal error: %s", err.Error())
        os.Exit(1)
    }
}

相关文章