首页 > 其他分享 >go项目 -- 即时通信系统V0.1 基础server构建

go项目 -- 即时通信系统V0.1 基础server构建

时间:2023-03-05 22:44:41浏览次数:36  
标签:err -- server listener go net Server Listen

跟着b站上刘丹冰Aceld大佬开始做go项目
image

  1. 创建server结构体,要有server的Ip和Port两个变量
type Server struct {
	Ip   string
	Port int
}
  1. 创建一个server的接口
func NewServer(ip string, port int) *Server {
	server := &Server{
		Ip:        ip,
		Port:      port,
	}
	return server
}
  1. 启用服务器接口
func (this *Server) Start() {
	//sorket listen
	listener, err := net.Listen("tcp", fmt.Sprintf("%s:%d", this.Ip, this.Port))
	if err != nil {
		fmt.Println("net.Listen err:", err)
		return
	}
	//close listen socket
	defer listener.Close()

	for {
		//accept
		conn, err := listener.Accept()
		if err != nil {
			fmt.Println("listener accept err", err)
			continue
		}

		//do handler
		go this.Handler(conn)
	}
}

  1. 当前连接要做的业务
func (this *Server) Handler(conn net.Conn) {
	//当前连接的业务
	fmt.Println("连接建立成功")
}
  1. main函数创建一个服务器进行测试
package main

func main() {
	server := NewServer("127.0.0.1", 8888)
	server.Start()
}

总结

  1. 结构体若希望被别的包能访问到,名字首字母要大写
  2. net.Listen()用于创建一个服务器,监听指定的网络协议和端口号。net.Listen(“tcp”, “:8080”)会创建一个TCP服务器,监听8080端口。net.Listen()函数返回一个Listener对象,它可以用于接受和关闭连接。
    如果在端口号前加上ip地址,表示只监听该ip上的该端口号。如果不写则表示监听所有指定端口号
  3. 关闭 listener 最好在创建后就在后面
    defer listener.Close()

标签:err,--,server,listener,go,net,Server,Listen
From: https://www.cnblogs.com/hzy717zsy/p/17182015.html

相关文章

  • Qt学习笔记 - 第一章 - 快速开始、信号与槽
    Qt学习笔记全系列传送门:【本章】Qt学习笔记-第一章-快速开始、信号与槽Qt学习笔记-第二章-添加图片、布局、界面切换目录1、Qt工程创建2、工程文件......
  • IO流-File
    File类/*File:文件和目录路径名的抽象表示1:文件和目录是可以通过File封装成对象的2:对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以是存在......
  • 二次开发-员工信息管理系统
    本程序主要实现对员工的信息管理,为1925223夏海涛同学的c语言期末大作业。程序会将输入的信息按照指引分别存入不同的文件,主要由结构体以及文件读取实现,按照不同序号可以实......
  • 说一下在写Android APP时遇到的具体问题
    问题一:总是显示出nosuchtable错误不要担心这个问题(该担心还是得担心一下的哈),以我出错多次的经验来看,只需要在运行APP之后,回到虚拟机的主界面,然后找到相应的APP虚拟软件,......
  • NOI 春季测试游寄
    day1水了一天的模板(然而一个都没考到,lb大佬没看都乱杀)day0考的时候T1想了半个小时,后来发现就算只有输入输出也要O(nm+q),不太可能,仔细一看原来n*m是小于10的七次方的,......
  • 打开MASA Blazor的正确姿势4.1:母版页布局
    MASABlazorr提供了丰富的组件及其控制属性,用于母版页布局(MainLayout.razor)。这些组件包括MApp、MMain、MSystemBar、MAppBar、MNavigationDrawer、MFooter和MBottomNavig......
  • Apache Hudi 0.13.0版本重磅发布!
    ApacheHudi0.13.0版本引入了许多新功能,包括Metaserver、变更数据捕获、新的RecordMergeAPI、Deltastreamer支持新数据源等。虽然此版本不需要表版本升级,但希望用户......
  • LeetCode 96. 不同的二叉搜索树(/)
    原题解题目约束题解方法一classSolution{public:intnumTrees(intn){vector<int>G(n+1,0);G[0]=1;G[1]=1;......
  • 2023.3.5 日寄
    2023.3.5日寄\(~~~~\)今天是摆摆天(除了维词),明天将会是摆摆天!\(~~~~\)那么今天日寄有什么好写的的?我猜大概是SpringLeague,但是这次题出成*了,怎么办呢?\(~~~~\)T1:看题......
  • 流量分析五之ICMP协议
    ICMP协议Internet控制消息协议ICMP(InternetControlMessageProtocol),用来在网络设备间传递各种差错和控制消息,并对于收集各种网络信息、诊断和排除各种网络故障等方面......