golang学习demo2-简单socket通信-client与server

涉及知识

  • golang的socket基本编程
  • defer 的使用(nice)
  • byte类型的使用

这是一个简单的golang socket应用demo

有两个程序, 分别是server和client, 功能是在client中输入字符串, 然后发送给server, server打印出来

server刚运行时阻塞监听client
在这里插入图片描述
然后启动某个client之后, server接受到一个连接
在这里插入图片描述
client中向server发送字符串
在这里插入图片描述
server成功接收
在这里插入图片描述
源代码

server.go

package main

// 聊天服务器

import (
	"fmt"
	"net"  // 做 socket编程需要
)

func process(conn net.Conn) {
	defer conn.Close()

	for {
		buf := make([]byte, 1024)

		//fmt.Println("server waiting for client: " + conn.RemoteAddr().String())
		n, err := conn.Read(buf)
		if err != nil {
			fmt.Println("server read err: ", err)
			return
		}
		fmt.Println(string(buf[:n]))  // 注意这里要切片 [:n], 不然会输出 1024个字节
	}
}

func main() {
	fmt.Println("开始监听...")
	// 指定网络协议以及本地监听端口
	listen, err := net.Listen("tcp", "0.0.0.0:8888")
	if err != nil {
		fmt.Println("listen error")
		return
	}

	defer listen.Close()

	for {
		fmt.Println("waiting for client...")
		conn, err := listen.Accept()
		if err != nil {
			fmt.Println("Accept err = ", err)
 		} else {
 			fmt.Println("Accept suc con = ", conn)
		}
		go process(conn)
	}
}

client.go

package main

// 聊天客户端

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

func main() {
	conn, err := net.Dial("tcp", "localhost:8888")
	if err != nil {
		fmt.Println("error: ", err)
	} else {
		//fmt.Println("con: ", conn)
	}
	for {
		// 从终端读取一行数据
		reader := bufio.NewReader(os.Stdin)
		line, err := reader.ReadString('\n')
		if err != nil {
			fmt.Println("readString err: ", err)
		}
		line = strings.Trim(line, " \r\n")  // 小心返回之后要赋值
		if line == "exit" {
			fmt.Println("break")
			return
		}
		_, err = conn.Write([]byte(line))
		if err != nil {
			fmt.Println("conn.Write err: ", err)
		}
		//fmt.Printf("客户端发送了 %d 字节的数据\n", n)
	}
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值