首页 > 其他分享 >go使用tcp实现两边通讯

go使用tcp实现两边通讯

时间:2022-12-10 20:44:44浏览次数:40  
标签:通讯 err text fmt tcp reader go net conn

描述:客户端可以接受服务端信息 & 写数据导服务端 服务端也一样
服务端代码

package main

import (
	"bufio"
	"fmt"
	"io"
	"net"
	"os"
	"strings"
)
func process(conn net.Conn){
	defer conn.Close()
	var buf[1024]byte
	reader:=bufio.NewReader(conn)
	for {
		n,err:=reader.Read(buf[:])
		if err  == io.EOF {
			break
		}
		if err != nil {
			return
		}
		recvStr:= string(buf[:n])
		fmt.Printf("收到客户端数据:%v\n",recvStr)
	}
}

//想客户端写写入数据
func write(conn net.Conn){
	defer conn.Close()
	reader:=bufio.NewReader(os.Stdin)
	for {
		text,_:=reader.ReadString('\n')
		text = strings.TrimSpace(text)
		conn.Write([]byte(text))
	}
}
func main(){
	listener,err:=net.Listen("tcp","0.0.0.0:8890")
	if err != nil {
		fmt.Println("start server is erros")
		return
	}
	fmt.Println("服务端启动成功...")
	fmt.Println("等待客户端的连接...")
	for {
		conn,_:= listener.Accept()
		go process(conn)
		go write(conn)
	}
	defer listener.Close()
}

客户端代码

package main

import (
	"bufio"
	"fmt"
	"io"
	"net"
	"os"
	"strings"
)
func read(conn net.Conn){
	defer conn.Close()
	var buf[1024]byte
	reader:=bufio.NewReader(conn)
	for {
		n,err:=reader.Read(buf[:])
		if err  == io.EOF {
			break
		}
		if err != nil {
			return
		}
		recvStr:= string(buf[:n])
		fmt.Printf("收到服务端数据为:%v\n",recvStr)
	}
}

func main(){
	conn,err:= net.Dial("tcp","127.0.0.1:8890")
	if err != nil {
		fmt.Println("is erro")
	}
	reader:= bufio.NewReader(os.Stdin)
	fmt.Printf("%v,\n","请写入内容")
	for {
		text,_:=reader.ReadString('\n')
		text = strings.TrimSpace(text)
		if text == "exit" {
			break
		}
		conn.Write([]byte(text))

		go read(conn)
	}
	conn.Close()
}

标签:通讯,err,text,fmt,tcp,reader,go,net,conn
From: https://www.cnblogs.com/zh718594493/p/16972279.html

相关文章

  • go解析未知json
    使用go语言写一段代码,将未知结构的json解析出来  这里是一个例子: packagemainimport("encoding/json""fmt")funcmain(){v......
  • 传奇GOM引擎版本架设教程
    传奇GOM引擎版本架设​传奇GOM引擎版本我们架设游戏需要用到的工具:​版本(游戏类型服务端)、DBC2000(游戏数据库)、RAR(解压工具)、传奇客户端、服务器、网盘​先把这些架设工具准......
  • django练习
    创建django项目:1.win+r打开cmd2.进入到你想要创建django项目的目录输入指令创建django项目django-adminstartproject项目名称在cmd输入cddjangotest进入项......
  • python之路46 django request对象 form表单 pycharm连接数据库 ORM简介
    静态文件配置1.编写一个用户登录页面2.静态文件不怎么经常变化的文件主要针对html文件所使用的到的各种资源css文件、js文件、img文件、第三方框架文件......
  • 初始Django
    web框架web框架本质上可以看成是一个很强大的socket服务端,用户的浏览器可以看成是拥有可视化界面的socket客户端,两者通过网络请求实现数据交互,也可以从框架层面上先简单的......
  • Django框架2、静态文件配置、form表单、request对象、pycharm链接数据库、django链接
    一、静态文件配置1、静态文件​ 指不经常发生变化的文件,主要针对html文件所使用到的各种资源​ 是前端已经写好了的能够直接调用或者使用的文件都可以称之为静态文件,比......
  • Django链接数据库 增删改查/配置
    Django静态文件配置服务端需要生成HTML文件,需要一些额外的CSS,JS代码文件以及img图片等,还有一些脚本帮助我们渲染网页页面,在Django中我们可以把这些文件统称为静态文件。......
  • 静态文件配置 django连接MySQL django模型层初识 ORM基本语句
    目录静态文件配置1.问题描述2.静态文件3.资源访问form表单属性补充actionmethod请求方法get请求post请求views层request对象request.methodrequest.POSTrequest.GETpyc......
  • Django只session
    1.session流程2.添加sessiondefindex(request):#添加sessionrequest.session["set_session"]="defaulit001"returnHttpResponse("测试效能")设置s......
  • Django web框架
    博客目录wsgiref模块jinja2模板语法django框架简介django基本操作静态文件配置django连接MySQLdjango模型层初识ORM基本语句......