抚松网站建设,建设厅副厅长,高端大气的网站,wordpress 加统计代码文章目录 网络编程1、网络编程的基本介绍2.网络编程的基础知识1#xff09;协议(tcp/ip)2#xff09;OSI与TCP/ip参考模型3#xff09;ip地址4#xff09;端口(port)介绍5#xff09;tcp socket编程的客户端和服务器端 3.socket编程快速入门4.经典项目-海量用户即时通讯系… 文章目录 网络编程1、网络编程的基本介绍2.网络编程的基础知识1协议(tcp/ip)2OSI与TCP/ip参考模型3ip地址4端口(port)介绍5tcp socket编程的客户端和服务器端 3.socket编程快速入门4.经典项目-海量用户即时通讯系统1项目开发流程2需求分析3界面设计 网络编程
1、网络编程的基本介绍
Golang的主要设计目标之一就是面向大规模后端服务程序网络通信这块是服务端程序必不可少也是至关重要的一部分
网络编程有两种
1TCP socket编程是网络编程的主流。之所以交TCP socket编程是因为底层是基于Tcp/ip协议的比如QQ聊天
2b/s结构的http编程。我们使用浏览器去访问服务器时使用的就是http协议而http底层依旧是tcp socke实现的比如京东商城(这属于go web开发范畴)
2.网络编程的基础知识
1协议(tcp/ip)
TCP/IP(Transmission Control Protocal)的简写中文译名为传输控制协议/因特网互联协议又叫网络通信协议这个协议是Internet最基本的协议 internet国际互联网的基础简单的说就是由网络层的IP协议和传输层的TCP协议组成的
协议的抽象理解图 2OSI与TCP/ip参考模型 详细结构模拟qq好友发送数据经过的网络协议层 3ip地址
概述每个internet上的主机和路由器都有一个ip地址他包括网络和主机号ip地址有ipv4(32位)和ipv6(128位)可以通过ipconfig来查看
4端口(port)介绍
我们这里所指的端口不是指物理意义上的端口而是特指TCP/IP协议上的端口是逻辑意义上的端口
如果把ip地址比作一个房子端口就是出入这间房子的门。真正的房子只有几个门但是一个ip地址的端口可以有65536(256256)个之多端口是通过端口号来标记的端口号只有整数范围是0到65535256256-1
端口–分类
0是保留端口1-1024是固定端口 又叫有名端口即被某些程序固定使用一般程序员不使用 22SSH远程登录协议 23telnet使用 21Ftp使用 25smtp服务使用 80iis使用 7echo服务1025-65535是动态端口这些端口程序员是可以使用的尽量使用40000以上的端口这样不易冲突更好地进行监听操作 端口(port)-使用注意
在计算机尤其是做服务器要尽可能的少开端口一个端口只能被一个程序监听如果使用netstat -an 可以查看本机有哪些端口在监听可以使用netstat -anb来查看监听端口的pid,在结合任务管理器关闭不安全的端口
5tcp socket编程的客户端和服务器端
下图为Golang socket编程中客户端和服务器的网络分布 3.socket编程快速入门
项目示意图 1服务端的处理流程
-1.监听端口
-2.创建客户端的tcp连接建立客户端和服务端的连接
-3.创建goroutine处理该连接的请求通常客户端会通过连接来发送请求包
server.go
package main
import (fmtnet //做网络socket开发时。net包含有我们需要所有的方法和函数// io
)func process(conn net.Conn) {//这里我们循环的接收客户端发送的数据defer conn.Close() //关闭connfor {//创建一个新的切片buf : make([]byte,1024)//1.等待客户端通过conn发送信息//2.如果客户端没有write[发送]那么协程就阻塞在这里fmt.Printf(服务器在等待客户端%s 发送信息 conn.RemoteAddr().String())n,err :conn.Read(buf) //从conn读取if err ! nil {fmt.Printf(客户端退出 err%v\n,err)return // !!!}//3.显示客户端发送的内容到服务器的终端fmt.Println(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(listen err)return}defer listen.Close() //延时关闭listen//循环等待客户端连接我for {//等待客户端连接诶fmt.Println(等待客户端连接...)conn, err : listen.Accept()if err ! nil {fmt.Println(Accept() err,err)}else {fmt.Println(Accept() suc conn%v 客户端ip为%v\n,conn,conn.RemoteAddr().String())}//这里准备启动一个协程为客户端服务go process(conn)}// fmt.Printf(Listen successfully%v\n,listen)
}2客户端的处理流程
-1.建立与服务端的链接
-2.发送请求数据接收服务器端返回的结果数据
-3.关闭连接
3客户端功能
-1.编写一个客户端程序能连接到服务端的8888端口
-2.客户端可以发送单行数据然后就退出
-3.能通过终端输入数据输入一行发送一行并发送给服务器端
-4.在终端输入exit表示退出程序
client.go
package main
import (fmtnetbufioosstrings
)func main() {conn, err :net.Dial(tcp,192.168.31.102:8888)if err ! nil {fmt.Println(client dial err,err)return}//功能1.客户端可以发送单行数据然后就退出reader: bufio.NewReader(os.Stdin) //os.Stdin 代表标准输入【终端】for {//从终端读取一行用户输入并准备发送给服务器line, err :reader.ReadString(\n)if err ! nil {fmt.Println(readerString err,err)}//如果用户输入的是exit就退出line strings.Trim(line, \r\n) if line exit{fmt.Println(客户端退出..)break}//再将line发送给服务器_, err conn.Write([]byte(line \n))if err ! nil {fmt.Println(conn.Write err,err)}//fmt.Printf(客户端发送了%d字节的数据并退出,n)}}运行效果图 4.经典项目-海量用户即时通讯系统
1项目开发流程
需求分析 --设计阶段–编码实现–测试阶段—实施
2需求分析
-1 用户注册
-2 用户登录
-3 显示在线用户列表
-4 群聊广播
-5 点对点聊天私聊
-6 离线留言
3界面设计 项目开发前技术准备
项目要保存用户信息和消息数据因此我们需要学习数据库(Redis和mysql),这里我们选择redis,先学习如何在golang中使用redis