go语言网络编程通信案例

一.服务端

package main

import (
	"fmt"
	"net"
)

// 服务端
func main() {
	fmt.Println("服务器开始监听...")
	listen, err := net.Listen("tcp", "localhost:8889")

	if err != nil {
		fmt.Println("监听错误:", err)
		return
	}
	// 延时关闭
	defer listen.Close()
	fmt.Println("listen地址:", listen.Addr()) //127.0.0.1:8888

	for {
		// 接收连接
		conn, err := listen.Accept()
		if err != nil {
			fmt.Println("接收连接失败:", err)
			continue
		} else {
			fmt.Println("接收连接conn:", conn.RemoteAddr())
		}
		// 处理连接请求
		go handleConn(conn)
	}
}

func handleConn(conn net.Conn) {
	defer conn.Close()
	for {
		fmt.Println("等待客户端消息:")
		// 读取客户端发来的消息
		var bf = make([]byte, 1024)
		n, err := conn.Read(bf)
		if err != nil {
			fmt.Println("服务端读取数据失败:", err)
			return
		}
		fmt.Println("服务端接收数据:", string(bf[:n]))
	}
}

二.客户端

package main

import (
	"bufio"
	"fmt"
	"net"
	"os"
	"strings"
)

// 客户端
func main() {
	conn, err := net.Dial("tcp", "localhost:8889")
	if err != nil {
		fmt.Println("客户端连接服务端错误:", err)
		return
	}
	defer conn.Close()
	for {
		fmt.Println("请输入消息(输入exit退出客户端):")
		// 发送消息给服务端
		readString, err := bufio.NewReader(os.Stdin).ReadString('\n') // 终端接收标准输入
		readString = strings.TrimSpace(readString)                    // 去除字符串两端的空白字符
		if readString == "exit" {
			break
		}
		if err != nil {
			fmt.Println("终端读取数据失败:", err)
			continue
		} else {
			fmt.Println("即将发送数据:", readString)
		}

		n, err := conn.Write([]byte(readString))
		if err != nil {
			fmt.Println("发送数据失败:", err)
			continue
		}
		fmt.Println("已发送数据字节数:", n)
	}

	fmt.Println("成功退出客户端!!!!!!!")
}

你可能感兴趣的:(golang,网络,开发语言)