golang练手项目之聊天室

client.go

package main

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

//让用户能后续输入数据
func scandata(conn net.Conn) {
	//for{}死循环保证用户不止能输入一次数据
	for {
		//使用bufio包结合缓冲区获取输入,可以使输入不受空格的影响
		inputReader := bufio.NewReader(os.Stdin)
		buf, _, _ := inputReader.ReadLine()
		//当用户输入q,则停止输入
		if string(buf) == "q" {
			os.Exit(0)
		}
		//将客户端用户输入的数据写入conn,让服务端去读取
		conn.Write(buf)
	}
}
func main() {
	//创建客户端,指定接口类型为tcp,IP地址为127.0.0.1,端口号为9909
	conn, _ := net.Dial("tcp", "127.0.0.1:9909")
	//设置每次从连接conn读取的字节数
	buf := make([]byte, 1024)
	//获取参数数组
	args := os.Args
	//获取第一个参数(即用户名,如go run clinet1.go 阿萨德,这里的args[1]就是阿萨德),再转换成字节数组,conn的读写数据只接受字节数组
	conn.Write([]byte(args[1]))
	//开启一个协程,让用户能后续输入数据
	go scandata(conn)
	//for{}死循环保证不止读取一次服务端写入的数据,只要服务端写入数据,客户端就能读取
	for {
		//conn.Read方法是一个同步阻塞的方法,就是说如果conn中没数据可读,下面的代码就不会执行
		n, _ := conn.Read(buf)
		//这里吧客户端读取到的数据转换为字节数组输出
		fmt.Println(string(buf[:n]))
	}
}

server1.go

pack
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值