Skip to content

Commit

Permalink
netMasterV0.1
Browse files Browse the repository at this point in the history
  • Loading branch information
vanyongqi committed Jul 9, 2023
0 parents commit ced4f4a
Show file tree
Hide file tree
Showing 9 changed files with 173 additions and 0 deletions.
8 changes: 8 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .idea/netMaster.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

36 changes: 36 additions & 0 deletions Demo/netMasterV0.1/Client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package main

import (
"fmt"
"net"
"time"
)

// Client
func main() {
fmt.Println("Client start...")
time.Sleep(1 * time.Second)
//conn 连接远程服务器
conn, err := net.Dial("tcp", "127.0.0.1:8888")
if err != nil {
fmt.Println("client start err,exit!")
}
for {
_, err := conn.Write([]byte("hello,mt"))
if err != nil {
fmt.Println("write conn err", err)
return
}

buf := make([]byte, 512)
cnt, err := conn.Read(buf)
if err != nil {
fmt.Println("read buf err")
return
}
fmt.Printf("server call back %s,cnt =%d \n", buf, cnt)
time.Sleep(1 * time.Second)
}
//调用 Write写数据

}
10 changes: 10 additions & 0 deletions Demo/netMasterV0.1/Server.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package main

import "netMaster/Master/masnet"

func main() {
//1 创建serve服务句柄,使用netmatser api
s := masnet.NewServer("master arrived, TROUBLE DISAPPEAR!")
//启动serve()
s.Serve()
}
7 changes: 7 additions & 0 deletions Master/masiface/Iserver.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package masiface

type Iserver interface {
Start()
Stop()
Serve()
}
86 changes: 86 additions & 0 deletions Master/masnet/server.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package masnet

import (
"fmt"
"net"
"netMaster/Master/masiface"
)

// 实现iserver接口
type Server struct {
Name string
IPversion string
IP string
Port int
}

func (s *Server) Start() {
fmt.Printf("[start] Server Listener at IP :%s, Port:%d,is starting\n", s.IP, s.Port)
//1 get addr
go func() {
//net 参数为 "ip", "ip4" 或者为"ip6",net 为空这默认 ip
addr, err := net.ResolveTCPAddr(s.IPversion, fmt.Sprintf("%s:%d", s.IP, s.Port))
if err != nil {
fmt.Println("error happened: resovle tcp add error", err)
return
}

//2 listen addr
listener, err := net.ListenTCP(s.IPversion, addr)
if err != nil {
fmt.Println("error happened:resovle listenner failed: ", s.IPversion, err)
return
}
fmt.Println("start Master successful", s.Name, "Listening :", s.Port)

//阻塞 等待客户端连接,处理客户端连接业务
for {
//客户端连接,阻塞返回
conn, err := listener.AcceptTCP()
if err != nil {
fmt.Println("Accept arr", err)
continue
}
//client 以及建立连接,可以开始进行业务
go func() {
for {
buf := make([]byte, 512)
cnt, err := conn.Read(buf) //阻塞
if err != nil {
fmt.Println("recv buf err", err)
continue
}
//echo
fmt.Printf("recv : %s,cnt is %d \n", buf, cnt)
if _, err := conn.Write(buf[0:cnt]); err != nil {
fmt.Println("write back buf err")
continue
}
}
fmt.Println()
}()
}
}()

}

func (s *Server) Stop() {
//TODO 释放服务器资源、状态,进行停止和回收

}

func (s *Server) Serve() {
s.Start() //只进行箭监听
//TODO 做一些启动服务器之后的额外业务
//阻塞,以免start完成后结束server
select {}
}
func NewServer(name string) masiface.Iserver {
s := &Server{
Name: name,
IPversion: "tcp4",
IP: "0.0.0.0",
Port: 8888,
}
return s
}
3 changes: 3 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module netMaster

go 1.20

0 comments on commit ced4f4a

Please sign in to comment.