Go语言实现服务端消息接收和发送_第1页
Go语言实现服务端消息接收和发送_第2页
Go语言实现服务端消息接收和发送_第3页
Go语言实现服务端消息接收和发送_第4页
Go语言实现服务端消息接收和发送_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论