热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Go基础——网络编程

16网络编程16.1tcpclient建立与服务端的链接进行数据收发关闭链接funcmain(){与服务端建立连接conn,err:net.Dial(tcp,127.
16网络编程

16.1tcp


client


  1. 建立与服务端的链接
  2. 进行数据收发
  3. 关闭链接

func main(){//与服务端建立连接conn, err := net.Dial("tcp", "127.0.0.1:20000")if err != nil{fmt.Printf("dial failed:%v\n", err)return}input := bufio.NewReader(os.Stdin)for{s, err := input.ReadString('\n')if err != nil{continue}//去掉空格s = strings.TrimSpace(s)if strings.ToUpper(s) == "Q"{return}//发消息_, err2 := conn.Write([]byte(s))if err != nil{fmt.Printf("send failed:%v", err2)return}//从服务端接受回复的消息var buf [1024]byten , err3 := conn.Read(buf[:])if err3 !=nil{fmt.Printf("read failed, %v\n", err3)}fmt.Println("received msg:", string(buf[:n]))}
}

server


  1. 监听端口
  2. 接收客户端请求建立链接
  3. 创建goroutine处理链接。

func process(conn net.Conn){defer conn.Close()//针对当前的链接做数据的发送和接受工作for{reader := bufio.NewReader(conn)var buf [128]byten, err := reader.Read(buf[:])if err != nil{fmt.Printf("err occured :%v\n", err)break}recv := string(buf[:n])fmt.Println("receive data:", recv)conn.Write([]byte("ok"))}}func main(){//开启服务listen, err := net.Listen("tcp", "127.0.0.1:20000")if err!=nil{fmt.Printf("err occured:%v\n", err)return}for{//等待客户端来建立链接conn, err := listen.Accept()if err != nil{fmt.Printf("err occured:%v\n", err)}//启动一个单独的goroutine来处理链接go process(conn)}
}

16.2udp


client

func main(){udp, err := net.DialUDP("udp", nil, &net.UDPAddr{IP: net.IPv4(127, 0, 0, 1),Port: 30000,})if err != nil{fmt.Println("err occured---", err)return}defer udp.Close()for{input := bufio.NewReader(os.Stdin)//fmt.Println("input string:",input)s, _ := input.ReadString('\n')_, err2 := udp.Write([]byte(s))if err2 != nil{fmt.Println("-err-------")return}//接受数据var buf [1024]byten, addr, err3 := udp.ReadFromUDP(buf[:])if err3 != nil{fmt.Println("error---:", err3)}fmt.Printf("read from%v, data :%v", addr, string(buf[:n]))}}

server

func main(){listen, err := net.ListenUDP("udp", &net.UDPAddr{IP: net.IPv4(127, 0, 0, 1),Port: 30000,})if err != nil{fmt.Printf("err occured when listen udp:%v", err)}defer listen.Close()for{var buf [1024]byten, addr, err := listen.ReadFromUDP(buf[:])if err != nil{fmt.Println("err occured when read from udp:", err)return}//接受到的数据fmt.Println("接受到的数据为:", string(buf[:n]))//返回数据fmt.Println(addr)_, err2 := listen.WriteToUDP(buf[:n], addr)if err2 != nil{fmt.Printf("err occured:%v", err2)continue}}}


推荐阅读
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
author-avatar
小鱼2502907687
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有