go语言学习笔记29------Goland之TCP、UDP通信并发②

1.TCP并发C/S模型通信

1.1并发Server

现在已经完成了客户端与服务端的通信,但是服务端只能接收一个用户发送过来的数据,怎样接收多个客户端发送过来的数据,实现一个高效的并发服务器呢?

Accept()函数的作用是等待客户端的链接,如果客户端没有链接,该方法会阻塞。如果有客户端链接,那么该方法返回一个Socket负责与客户端进行通信。所以,每来一个客户端,该方法就应该返回一个Socket与其通信,因此,可以使用一个死循环,将Accept()调用过程包裹起来。

需要注意的是,实现并发处理多个客户端数据的服务器,就需要针对每一个客户端连接,单独产生一个Socket,并创建一个单独的goroutine与之完成通信。


package main

import (
   "net"
   "fmt"
)

func Handle(conn net.Conn)  {
   buf:=make([]byte,4096)
   n,err:=conn.Read(buf)
   if err!=nil{
      fmt.Println("read err",err)
      return 
   }
   messsage:=buf[:n]
   fmt.Println("%d服务器端发来信息%s",conn.RemoteAddr(),messsage)
}
func main() {
   listen, err := net.Listen("tcp", "127.0.0.1")
   if err != nil {
      fmt.Println("listen err", err)
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值