Go-SMPP 项目教程
1. 项目的目录结构及介绍
go-smpp/
├── cmd/
│ ├── smpp-receiver/
│ │ └── main.go
│ └── smpp-repl/
│ └── main.go
├── pkg/
│ ├── smpp/
│ │ ├── bind.go
│ │ ├── commands.go
│ │ ├── connection.go
│ │ ├── pdu.go
│ │ ├── session.go
│ │ └── utils.go
│ └── utils/
│ └── utils.go
├── .gitignore
├── go.mod
├── go.sum
├── LICENSE
└── README.md
目录结构介绍
cmd/
: 包含项目的命令行工具,如smpp-receiver
和smpp-repl
。smpp-receiver/
: SMPP 简单接收工具。smpp-repl/
: SMPP 简单测试工具。
pkg/
: 包含项目的核心包。smpp/
: SMPP 协议的核心实现。bind.go
: 绑定相关操作。commands.go
: 命令定义。connection.go
: 连接管理。pdu.go
: PDU 处理。session.go
: 会话管理。utils.go
: 工具函数。
utils/
: 通用工具函数。
.gitignore
: Git 忽略文件配置。go.mod
: Go 模块文件。go.sum
: Go 模块校验文件。LICENSE
: 项目许可证。README.md
: 项目说明文档。
2. 项目的启动文件介绍
cmd/smpp-receiver/main.go
这是 smpp-receiver
工具的入口文件,负责启动 SMPP 接收器。
package main
import (
"log"
"github.com/fiorix/go-smpp/smpp"
"github.com/fiorix/go-smpp/smpp/pdu/pdufield"
)
func main() {
conn := smpp.NewConnection("localhost:2775")
err := conn.Bind("receiver", "systemID", "password")
if err != nil {
log.Fatal(err)
}
defer conn.Close()
for {
pdu, err := conn.Read()
if err != nil {
log.Fatal(err)
}
log.Printf("Received PDU: %+v\n", pdu)
}
}
cmd/smpp-repl/main.go
这是 smpp-repl
工具的入口文件,提供一个简单的 SMPP 测试环境。
package main
import (
"log"
"github.com/fiorix/go-smpp/smpp"
)
func main() {
conn := smpp.NewConnection("localhost:2775")
err := conn.Bind("transceiver", "systemID", "password")
if err != nil {
log.Fatal(err)
}
defer conn.Close()
// 简单的 REPL 循环
for {
var command string
fmt.Scanln(&command)
switch command {
case "submit":
pdu := smpp.NewSubmitSM()
pdu.Fields().Set(pdufield.SourceAddr, "1234")
pdu.Fields().Set(pdufield.DestinationAddr, "5678")
pdu.Fields().Set(pdufield.ShortMessage, "Hello, SMPP!")
resp, err := conn.Submit(pdu)
if err != nil {
log.Fatal(err)
}
log.Printf("Submit response: %+v\n", resp)
default:
log.Println("Unknown command")
}
}
}
3. 项目的配置文件介绍
项目没有显式的配置文件,但可以通过代码中的