Golang学习+深入(十五)-网络编程

news/2024/3/19 10:19:16/文章来源:https://blog.csdn.net/weixin_42472027/article/details/130377032

目录

一、概述

1、网络编程

1.1、网络编程

1.2、服务器端+客户端


一、概述

1、网络编程

QQ、迅雷、百度网盘客户端等等。

Golang的主要设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端程序必不可少也是至关重要的一部分。

网络编程有两种:

  1. TCP socket编程,是网络编程的主流。之所以叫TCP socket编程,是因为底层是基于Tcp/ip协议的,比如QQ聊天
  2. B/S结构的http编程,我们使用浏览器去访问服务器时,使用的就是http协议,而http底层依旧是用tcp socket实现的。

端口(port):把IP比作一间房子,端口就是出入这间房子的门。IP地址的端口可以有65536(即:256x256)个之多!端口只有整数,范围是从0到65535(256X256-1)

端口分类: 0号是保留端口 1-1024是固定端口又叫又名端口,即被某些程序固定使用,一般程序员不使用 22:SSH远程登录协议 23:telnet使用 21:ftp使用 25:smtp服务使用 80:iis使用 7:echo服务

1025-65535是动态端口,这些端口,程序员可以使用。

  1. 尽可能的少开端口
  2. 一个端口只能被一个程序监听
  3. 如果使用netstat -an 可以查看本机有哪些端口在监听
  4. 可以使用netstat -anb 来查看监听端口的pid,再结合任务管理器关闭不安全的端口

1.1、网络编程

import "net":net包提供了可移植的网络I/O接口,包括TCP/IP、UDP、域名解析和Unix域socket。
func Listen(net, laddr string) (Listener, error):返回在一个本地网络地址
laddr上监听的Listener。网络类型参数net必须是面向流的网络:
"tcp"、"tcp4"、"tcp6"、"unix"或"unixpacket"。
type Listener interface {// Addr返回该接口的网络地址Addr() Addr// Accept等待并返回下一个连接到该接口的连接Accept() (c Conn, err error)// Close关闭该接口,并使任何阻塞的Accept操作都会不再阻塞并返回错误。Close() error
}
Example
// Listen on TCP port 2000 on all interfaces.
l, err := net.Listen("tcp", ":2000")
if err != nil {log.Fatal(err)
}
defer l.Close()
for {// Wait for a connection.conn, err := l.Accept()if err != nil {log.Fatal(err)}// Handle the connection in a new goroutine.// The loop then returns to accepting, so that// multiple connections may be served concurrently.go func(c net.Conn) {// Echo all incoming data.io.Copy(c, c)// Shut down the connection.c.Close()}(conn)
}

1.2、服务器端+客户端

服务端

package main
import ("fmt""net"
)func process(conn net.Conn) {defer conn.Close()for{buf := make([]byte,1024)//conn.Read(buf)//1.等待客户端通过conn发送信息//2.如果客户端没有write[发送],那么协程就阻塞在这里fmt.Printf("服务器在等待客户端 %s 发送信息\n",conn.RemoteAddr().String())n,err := conn.Read(buf)if err != nil {fmt.Println("客户端退出",err)return}//3.显示客户端发送的内容到服务器的终端fmt.Print(string(buf[:n]))}
}func main(){fmt.Println("服务器开始监听...")//net.Listen("tcp", "0.0.0.0:8888")//1.tcp 表示使用网络协议是tcp//2.0.0.0.0:8888表示在本地监听8888端口listen, err := net.Listen("tcp", "0.0.0.0:8888")if err != nil {fmt.Println(err)return}defer listen.Close()for {// Wait for a connection.conn, err := listen.Accept()if err != nil {fmt.Println(err)return}else{fmt.Printf("conn=%v\n",conn)}go process(conn)}
}

客户端

package main
import ("fmt""net""bufio""os""strings"
)func main(){conn, err := net.Dial("tcp", "127.0.0.1:8888")if err != nil {fmt.Println("client dial err=",err)return}fmt.Fprintf(conn, "GET / HTTP/1.0\r\n\r\n")//status, err := bufio.NewReader(conn).ReadString('\n')reader := bufio.NewReader(os.Stdin)for{line,err := reader.ReadString('\n')if err != nil {fmt.Println("ReadString err=",err)return}line = strings.Trim(line," \r\n")if line=="exit"{fmt.Println("客户端退出")break}_,err = conn.Write([]byte(line+"\n"))if err != nil {fmt.Println("conn.Write err=",err)return}}
}

客户端可循环从终端输入内容,直到输入exit退出客户端

干我们这行,啥时候懈怠,就意味着长进的停止,长进的停止就意味着被淘汰,只能往前冲,直到凤凰涅槃的一天!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_103768.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

必须要知道的hive调优知识(下)

Hive如果不用参数调优,在map和reduce端应该做什么 1、map阶段优化 Map阶段的优化,主要是确定合适的map数。那么首先要了解map数的计算公式 num_reduce_tasks min[${hive.exec.reducers.max}, (${input.size}/${hive.exec.reducers.bytes.per.reducer…

《一次性分割一切》阅读笔记

目录 0 体验 1 摘要 2 十个问题 参考文献 0 体验 体验地址:SEEM - a Hugging Face Space by xdecoder 体验结果: 将哈士奇和汽车人从图片中分割出来。 1 摘要 尽管对于交互式人工智能系统的需求不断增长,但在视觉理解(例如…

Qt5.9学习笔记-事件(一)

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三…

对git的简单总结

Git的基本使用 配置用户名和邮箱常见的操作查看仓库的状态远端仓库整体流程分支本地分支命令远端分支命令 这几天在做毕业设计,需要用到git,所以简单总结一下git的基本使用。 配置用户名和邮箱 git config --global user.name "Your Name" g…

ai模型训练生成效果 chilloutmix_NiPrunedFp32Fix.safetensors

模型名称: chilloutmix_NiPrunedFp32Fix.safetensors 关键词 extremely detailed CG unity 8k wallpaper,(masterpiece),(best quality),(ultra detailed),(ultra realistic),(Best character details:1.2),dynamic angle,professional lighting, photon mapping, …

【22-23 春学期】人工智能基础--AI作业6-误差反向传播

老师发布作业链接:(429条消息) 【22-23 春学期】AI作业6-误差反向传播_HBU_David的博客-CSDN博客 目录 老师发布作业链接:(429条消息) 【22-23 春学期】AI作业6-误差反向传播_HBU_David的博客-CSDN博客 1.梯度下降 2.反向传播 3.计算图 4.使用Numpy…

【代理设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

简介 代理模式(Proxy Pattern)是一种结构型设计模式,用一个类来代理另一个类或几个类的功能。 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。 延迟初始化(虚拟代理)。如…

FPGA基础知识 LCMXO3LF-6900C-6BG400I FPGA可编程逻辑简介

FPGA是英文Field-Programmable Gate Array的缩写,即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定…

喜报 | ScanA内容安全云监测获评“新一代信息技术创新产品”

4月20日,在赛迪主办的2023 IT市场年会上,“年度IT市场权威榜单”正式发布。 知道创宇的ScanA内容安全云监测产品荣获“新一代信息技术创新产品”奖项。作为中国IT业界延续时间最长的年度盛会之一,历届IT市场年会公布的IT市场权威榜单已成为市…

状态模式——随遇而安

● 状态模式介绍 状态模式中的行为是由状态来决定的,不用的状态下有不同的行为。状态模式和策略模式结构几乎完全一样,但它们的目的、本质却完全不一样就。状态模式的行为是平行的、不可替代的,策略模式的行为是彼此孤立、可相互替换的。用一…

微分方程数值解法(Runge-Kutta法PLC实现)

微分方程数值解法之欧拉法请参看下面的博客文章: 微分方程数值解法(PID仿真用一阶被控对象库PLC算法实现)_数学微积分算法plc编程实例_RXXW_Dor的博客-CSDN博客微分方程除极特殊情况外,大部分不可能求出它的精确解,只能用各种近似方法得到满足一定精度的近似解,微分方程由…

web端导航菜单系列

导航菜单属于导航中最常规的一种导航模式,它有2个显而易见的用途:帮助我们找到想要的任何东西和告诉我们现在身在何处。帮助用户在不同页面之间跳转找到目标功能。 导航作为网站或者平台的骨架,是产品设计中不容忽视的一环。结合自身对于导航…

如何建立Linux与git的连接?

文章目录 建立连接三板斧: 本文以Xshell为案例进行与git的连接! 建立连接三板斧: add , commit ,push Linux与git远程连接的方法: 1.设置全局的用户名和邮箱 git config – global user.name “你的用户名” git config – glo…

Springboot Mybatis使用pageHelper实现分页查询

以下介绍实战中数据库框架使用的是mybatis,对整合mybatis此处不做介绍。 使用pageHelper实现分页查询其实非常简单,共两步: 一、导入依赖; 二、添加配置; 那么开始, 第一步: pom.xml添加依…

不得不的创建型模式-原型模式

原型模式是一种创建型模式&#xff0c;它通过复制一个已有对象来创建新的对象&#xff0c;而无需知道新对象的具体类型。 原型模型的结构&#xff1a; 下面是一个简单的C实现原型模式的代码示例&#xff1a; #include <iostream> #include <string> #include <…

ChatGLM ptuning 的实战方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

LVS+keepalived 群集

Keepalived及其工作原理 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案&#xff0c;可以解决静态路由出现的单点故障问题 在一个LVS服务集群中通常有主服务器&#xff08;MASTER&#xff09;和备份服务器&#xff08;BACKUP&#xff09;两种角色的服务器&#xff…

tongweb

13051667606 东方通产品介绍 产品兼容 硬件要求 安装 安装目录结构 启动tongweb 停止tongweb bin下常用命令 企业版管理控制台 文档&#xff1a;产品简介及安装指南 绿色版直接解压安装 tar -zxvf …tar.gz Tongweb的配置文件 在conf的tongweb.xml 修改端口等信息 通过页面…

宁波博视眼科俞存院长:晒太阳会晒出白内障?是真的吗?

春意渐浓&#xff0c;人们纷纷踏出家门&#xff0c;享受暖暖的阳光。众所周知&#xff0c;适当晒太阳可以促进人体合成维生素D&#xff0c;对身体有一定的好处。 但你知道吗?太阳光中的紫外线可能会导致部分眼病的出现&#xff0c;例如&#xff1a;白内障。 晒太阳怎么会晒出白…

028:Mapbox GL 绘制线段,实时测量长度距离值

第028个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中添加draw组件,绘制线段,编辑线段,实时显示长度值。这里使用turf来计算长度值,采用默认的单位千米。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代…