




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第Go语言实现服务端消息接收和发送本文实例为大家分享了Go实现服务端消息接收和发送的具体代码,供大家参考,具体内容如下
一.服务端接收数据并返回数据
服务端代码
packagemain
import(
"net"
"fmt"
funcmain(){
//创建TCPAddress变量,指定协议tcp4,监听本机8899端口
addr,_:=net.ResolveTCPAddr("tcp4","localhost:8899")
//监听TCPAddress设定的地址
lis,_:=net.ListenTCP("tcp4",addr)
fmt.Println("服务器已启动")
//阻塞式等待客户端消息,返回连接对象,用于接收客户端消息或向客户端发送消息
conn,_:=lis.Accept()
//把数据读取到切片中
b:=make([]byte,256)
fmt.Println("read之前")
//客户端没有发送数据且客户端对象没有关闭,Read()将会阻塞,一旦接收到数据就不阻塞
count,_:=conn.Read(b)
fmt.Println("接收到的数据:",string(b[:count]))
/*
向客户端发送数据
*/
conn.Write([]byte("这是服务器传递的数据"))
//关闭连接
conn.Close()
fmt.Println("服务器结束")
}
客户端代码
packagemain
import(
"net"
"fmt"
funcmain(){
//服务器端ip和端口
addr,_:=net.ResolveTCPAddr("tcp4","localhost:8899")
//申请连接客户端
conn,_:=net.DialTCP("tcp4",nil,addr)
//向服务端发送数据
count,_:=conn.Write([]byte("客户端传递的数据"))
fmt.Println("客户端向服务端发送的数据量为:",count)
/*
接收服务器传递回来的数据
*/
b:=make([]byte,256)
c,_:=conn.Read(b)
fmt.Println(string(b[:c]))
关闭连接
conn.Close()
fmt.Println("客户端结束")
}
可以在服务端添加循环,不停接收客户端发送来的数据,服务端代码修改如下
packagemain
import(
"net"
"fmt"
funcmain(){
addr,_:=net.ResolveTCPAddr("tcp4","localhost:8899")
lis,_:=net.ListenTCP("tcp4",addr)
fmt.Println("服务器已启动")
/*
服务器端添加死循环,不停的接收客户端对象
*/
for{
conn,_:=lis.Accept()
b:=make([]byte,256)
count,_:=conn.Read(b)
nc:=string(b[:count])
fmt.Println("接收到的数据:",nc)
conn.Write([]byte("服务器:"+nc))
conn.Close()
fmt.Println("服务器结束")
}
客户端代码修改如下
packagemain
import(
"net"
"fmt"
"strconv"
funcmain(){
//服务器端ip和端口
addr,_:=net.ResolveTCPAddr("tcp4","localhost:8899")
//通过循环,模拟发送五次客户端请求
fori:=1;ii++{
conn,_:=net.DialTCP("tcp4",nil,addr)
conn.Write([]byte("客户端数据"+strconv.Itoa(i)))
b:=make([]byte,256)
c,_:=conn.Read(b)
fmt.Println("第",i,"次服务器返回的数据:",string(b[:c]))
conn.Close()
fmt.Println("客户端结束")
}
三.并发访问
上面代码的问题是服务器获取到客户端对象后,如果客户端什么也没有输入,其他客户端无法连接.可以通过结合goroutine完成并发访问
只需要修改server.go,在里面添加goroutine
packagemain
import(
"net"
"fmt"
funcmain(){
addr,_:=net.ResolveTCPAddr("tcp4","localhost:8899")
lis,_:=net.ListenTCP("tcp4",addr)
fmt.Println("服务器已启动")
/*
服务器端添加死循环,不停的接收客户端对象
*/
for{
conn,_:=lis.Accept()
gofunc(){//在此处添加创建gofunc()即可
b:=make([]byte,256)
count,_:=conn.Read(b)
nc:=string(b[:count])
fmt.Println("接收到的数据:",n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全案设计定金合同范例
- 会展场地出租合同范例
- 仪器产品销售合同范例
- 个人有偿代理合同范例
- 两人合伙开店合同样本
- 公司购买设备合同范例
- 企业节能培训合同范例
- 买宅基地样写合同范例
- 矿山瓦斯监测与治理一体化工程合同
- 纺织品出口货物意外损失赔偿补充协议
- 2024年社区警务规范考试题库
- 行业数字化转型推进方案
- 专题07 解析几何(选填题)-【好题汇编】五年(2020-2024)高考数学真题分类汇编(含答案解析)
- 《古代印度》课件
- 2024年大学生心理健康知识竞赛题库及答案共180题
- 医疗行业新基建+医疗健康系列报告之:回归需求整合价值医疗AI创新的道与智
- 商会工资管理制度
- 汽车常识课件教学课件
- 2024年山东省青岛市中考地理试题卷(含答案及解析)
- 制氢技术与工艺 课件 第3-5章 天然气制氢、石油制氢、电解水制氢
- 《卫生事业管理学》题集
评论
0/150
提交评论