Documentation ¶
Overview ¶
Package netx Created by xuzhuoxi on 2019-03-13. @author xuzhuoxi
Package netx Created by xuzhuoxi on 2019-02-14. @author xuzhuoxi
Package netx Created by xuzhuoxi on 2019-03-10. @author xuzhuoxi
Package netx Created by xuzhuoxi on 2019-02-14. @author xuzhuoxi
Index ¶
- Constants
- Variables
- func DefaultPackHandler(data []byte, senderAddress string, other interface{}) bool
- func HttpGet(url string, cb ReqCallBack) error
- func HttpPost(url, contentType string, body io.Reader, cb ReqCallBack) error
- func HttpPostForm(url string, data url.Values, cb ReqCallBack) error
- func HttpPostString(url, body string, cb ReqCallBack) error
- func RegisterNetwork(network SockNetwork, newServer func() ISockServer, ...)
- type AddrRemovedInfo
- type AddressProxy
- func (p *AddressProxy) GetAddress(id string) (address string, ok bool)
- func (p *AddressProxy) GetId(address string) (id string, ok bool)
- func (p *AddressProxy) MapIdAddress(id string, address string)
- func (p *AddressProxy) RemoveByAddress(address string)
- func (p *AddressProxy) RemoveById(id string)
- func (p *AddressProxy) Reset()
- type ConnNilError
- type EmptyAddrError
- type FuncPackHandler
- type HttpServer
- func (s *HttpServer) ClearMaps()
- func (s *HttpServer) MapFunc(pattern string, f func(w http.ResponseWriter, r *http.Request))
- func (s *HttpServer) MapHandle(pattern string, handler http.Handler)
- func (s *HttpServer) Running() bool
- func (s *HttpServer) StartServer(addr string) error
- func (s *HttpServer) StopServer() error
- type IAddressProxy
- type IAddressProxyGetter
- type IAddressProxySetter
- type IClient
- type IConnReadWriterAdapter
- type IConnReaderAdapter
- type IConnWriterAdapter
- type IHttpServer
- type IPackHandlerContainer
- type IPackHandlerContainerGetter
- type IPackHandlerContainerSetter
- type IPackReceiver
- type IPackReceiverGetter
- type IPackReceiverSetter
- type IPackSendReceiver
- type IPackSender
- type IPackSenderGetter
- type IPackSenderSetter
- type IRPCClient
- type IRPCServer
- type IRemoteAddress
- type IServer
- type IServerConn
- type IServerConnSet
- type ISockClient
- type ISockClientGetter
- type ISockClientSetter
- type ISockConn
- type ISockEventClient
- type ISockEventServer
- type ISockName
- type ISockSender
- type ISockSenderGetter
- type ISockSenderSetter
- type ISockServer
- type ISockServerGetter
- type ISockServerSetter
- type NoAddrError
- type PackHandlerContainer
- func (ph *PackHandlerContainer) AppendPackHandler(handler FuncPackHandler) error
- func (ph *PackHandlerContainer) ClearHandler(handler FuncPackHandler) error
- func (ph *PackHandlerContainer) ClearHandlers() error
- func (ph *PackHandlerContainer) FirstHandler(first func(handler FuncPackHandler) bool)
- func (ph *PackHandlerContainer) ForEachHandler(each func(handler FuncPackHandler) bool)
- func (ph *PackHandlerContainer) LastHandler(first func(handler FuncPackHandler) bool)
- func (ph *PackHandlerContainer) SetPackHandlers(handlers []FuncPackHandler) error
- func (ph *PackHandlerContainer) Size() int
- type RPCClient
- type RPCServer
- type ReadWriterAdapter
- type ReaderUnSupportError
- type ReqCallBack
- type SockClientBase
- func (o *SockClientBase) GetLogger() logx.ILogger
- func (o *SockClientBase) GetName() string
- func (o *SockClientBase) GetPackHandlerContainer() IPackHandlerContainer
- func (o *SockClientBase) IsOpening() bool
- func (o *SockClientBase) IsReceiving() bool
- func (o *SockClientBase) LocalAddress() string
- func (o *SockClientBase) SendBytesTo(bytes []byte, rAddress ...string) error
- func (o *SockClientBase) SendPackTo(msg []byte, rAddress ...string) error
- func (o *SockClientBase) SetLogger(logger logx.ILogger)
- func (o *SockClientBase) SetName(name string)
- func (o *SockClientBase) SetPackHandlerContainer(packHandler IPackHandlerContainer)
- func (o *SockClientBase) StartReceiving() error
- func (o *SockClientBase) StopReceiving() error
- type SockNetwork
- type SockParams
- type SockServerBase
- func (s *SockServerBase) DispatchServerConnCloseEvent(dispatcher eventx.IEventDispatcher, address string)
- func (s *SockServerBase) DispatchServerConnOpenEvent(dispatcher eventx.IEventDispatcher, address string)
- func (s *SockServerBase) DispatchServerStartedEvent(dispatcher eventx.IEventDispatcher)
- func (s *SockServerBase) DispatchServerStoppedEvent(dispatcher eventx.IEventDispatcher)
- func (s *SockServerBase) GetLogger() logx.ILogger
- func (s *SockServerBase) GetName() string
- func (s *SockServerBase) GetPackHandlerContainer() IPackHandlerContainer
- func (s *SockServerBase) IsRunning() bool
- func (s *SockServerBase) SetLogger(logger logx.ILogger)
- func (s *SockServerBase) SetName(name string)
- func (s *SockServerBase) SetPackHandlerContainer(packHandlerContainer IPackHandlerContainer)
Constants ¶
View Source
const ( RpcNetworkTCP = "tcp" RpcNetworkHttp = "http" )
View Source
const ( ServerEventStart = "netx.ServerEventStart" ServerEventStop = "netx.ServerEventStop" ServerEventConnOpened = "netx.ServerEventConnOpened" ServerEventConnClosed = "netx.ServerEventConnClosed" )
View Source
const (
EventAddressRemoved = "EventAddressRemoved"
)
View Source
const ReceiverBuffLen = 2048
Variables ¶
View Source
var ErrHttpServerStarted = errors.New("http: Server started")
View Source
var ErrSockServerStarted = errors.New("socket: Server started")
Functions ¶
func DefaultPackHandler ¶
func HttpGet ¶
func HttpGet(url string, cb ReqCallBack) error
func HttpPostForm ¶
func HttpPostForm(url string, data url.Values, cb ReqCallBack) error
func HttpPostString ¶
func HttpPostString(url, body string, cb ReqCallBack) error
func RegisterNetwork ¶
func RegisterNetwork(network SockNetwork, newServer func() ISockServer, newClient func() ISockClient, newClient2 func() ISockClient)
Types ¶
type AddrRemovedInfo ¶ added in v1.0.4
type AddressProxy ¶
type AddressProxy struct { eventx.EventDispatcher // contains filtered or unexported fields }
func NewAddressProxy ¶
func NewAddressProxy() *AddressProxy
func NewAddressProxyWithName ¶ added in v1.0.4
func NewAddressProxyWithName(name string) *AddressProxy
func (*AddressProxy) GetAddress ¶
func (p *AddressProxy) GetAddress(id string) (address string, ok bool)
func (*AddressProxy) MapIdAddress ¶
func (p *AddressProxy) MapIdAddress(id string, address string)
func (*AddressProxy) RemoveByAddress ¶
func (p *AddressProxy) RemoveByAddress(address string)
func (*AddressProxy) RemoveById ¶
func (p *AddressProxy) RemoveById(id string)
func (*AddressProxy) Reset ¶
func (p *AddressProxy) Reset()
type ConnNilError ¶
type ConnNilError string
func (ConnNilError) Error ¶
func (e ConnNilError) Error() string
func (ConnNilError) Temporary ¶
func (e ConnNilError) Temporary() bool
func (ConnNilError) Timeout ¶
func (e ConnNilError) Timeout() bool
type EmptyAddrError ¶
type EmptyAddrError string
func (EmptyAddrError) Error ¶
func (e EmptyAddrError) Error() string
func (EmptyAddrError) Temporary ¶
func (e EmptyAddrError) Temporary() bool
func (EmptyAddrError) Timeout ¶
func (e EmptyAddrError) Timeout() bool
type FuncPackHandler ¶
FuncPackHandler 消息处理函数,用于处理Sock消息 @param data: 消息数据 @param senderAddress: 发送者连接地址 @param other: 其它信息 @return catch; 当前是否已经把消息处理
type HttpServer ¶
func (*HttpServer) ClearMaps ¶
func (s *HttpServer) ClearMaps()
func (*HttpServer) MapFunc ¶
func (s *HttpServer) MapFunc(pattern string, f func(w http.ResponseWriter, r *http.Request))
func (*HttpServer) Running ¶
func (s *HttpServer) Running() bool
func (*HttpServer) StartServer ¶
func (s *HttpServer) StartServer(addr string) error
func (*HttpServer) StopServer ¶
func (s *HttpServer) StopServer() error
type IAddressProxy ¶
type IAddressProxy interface { eventx.IEventDispatcher // GetId // 能过地址找id GetId(address string) (id string, ok bool) // GetAddress // 能过id找地址 GetAddress(id string) (address string, ok bool) // MapIdAddress // 把id和地址加入映射表 MapIdAddress(id string, address string) // RemoveById // 移除id相关映射 RemoveById(id string) // RemoveByAddress // 移除地址相关映射 RemoveByAddress(address string) // Reset // 重置 Reset() }
IAddressProxy 难住地址与id的双向映射
func NewIAddressProxy ¶
func NewIAddressProxy() IAddressProxy
func NewIAddressProxyWithName ¶ added in v1.0.4
func NewIAddressProxyWithName(name string) IAddressProxy
type IAddressProxyGetter ¶
type IAddressProxyGetter interface {
GetAddressProxy() IAddressProxy
}
type IAddressProxySetter ¶
type IAddressProxySetter interface {
SetAddressProxy(proxy IAddressProxy)
}
type IClient ¶
type IClient interface { // IsOpening // 连接是否打开中 IsOpening() bool // OpenClient // 打开 OpenClient(params SockParams) error // CloseClient // 关闭 CloseClient() error }
type IConnReadWriterAdapter ¶
type IConnReadWriterAdapter interface { IRemoteAddress // contains filtered or unexported methods }
type IConnReaderAdapter ¶
type IConnReaderAdapter interface { IRemoteAddress // contains filtered or unexported methods }
type IConnWriterAdapter ¶
type IConnWriterAdapter interface { IRemoteAddress // contains filtered or unexported methods }
type IHttpServer ¶
type IHttpServer interface { // Running // 启动中 Running() bool // StartServer // 启动Http服务 StartServer(addr string) error // StopServer // 停止Http服务 StopServer() error // MapHandle // 映射请求响应处理器 MapHandle(pattern string, handler http.Handler) // MapFunc // 映射请求响应函数 MapFunc(pattern string, f func(w http.ResponseWriter, r *http.Request)) // ClearMaps // 清除映射 ClearMaps() }
func NewHttpServer ¶
func NewHttpServer() IHttpServer
type IPackHandlerContainer ¶
type IPackHandlerContainer interface { // Size Handler size // 处理函数数量 Size() int // FirstHandler // 由第一个处理 FirstHandler(first func(handler FuncPackHandler) bool) // LastHandler // 由最后一个处理 LastHandler(last func(handler FuncPackHandler) bool) // ForEachHandler // 依顺序遍历处理 // each返回true,则中断遍历 ForEachHandler(each func(handler FuncPackHandler) bool) // AppendPackHandler // 追加消息处理函数 AppendPackHandler(handler FuncPackHandler) error // ClearHandler // 清除消息处理函数 ClearHandler(handler FuncPackHandler) error // ClearHandlers // 清除全部消息处理函数 ClearHandlers() error // SetPackHandlers // 设置消息处理函数列表 SetPackHandlers(handlers []FuncPackHandler) error }
func NewDefaultIPackHandler ¶
func NewDefaultIPackHandler() IPackHandlerContainer
func NewIPackHandler ¶
func NewIPackHandler(handlers []FuncPackHandler) IPackHandlerContainer
type IPackHandlerContainerGetter ¶
type IPackHandlerContainerGetter interface {
GetPackHandlerContainer() IPackHandlerContainer
}
type IPackHandlerContainerSetter ¶
type IPackHandlerContainerSetter interface {
SetPackHandlerContainer(packHandlerContainer IPackHandlerContainer)
}
type IPackReceiver ¶
type IPackReceiver interface { logx.ILoggerSupport // contains filtered or unexported methods }
func NewPackMultiReceiver ¶
func NewPackMultiReceiver(reader IConnReaderAdapter, packHandlerContainer IPackHandlerContainer, dataBlockHandler bytex.IDataBlockHandler, logger logx.ILogger) IPackReceiver
func NewPackReceiver ¶
func NewPackReceiver(reader IConnReaderAdapter, packHandlerContainer IPackHandlerContainer, dataBlockHandler bytex.IDataBlockHandler, logger logx.ILogger) IPackReceiver
type IPackReceiverGetter ¶
type IPackReceiverGetter interface {
GetPackReceiver() IPackReceiver
}
type IPackReceiverSetter ¶
type IPackReceiverSetter interface {
SetPackReceiver(receiver IPackReceiver)
}
type IPackSendReceiver ¶
type IPackSendReceiver interface { logx.ILoggerSupport // contains filtered or unexported methods }
func NewPackSendReceiver ¶
func NewPackSendReceiver(reader IConnReaderAdapter, writer IConnWriterAdapter, packHandlerContainer IPackHandlerContainer, dataBlockHandler bytex.IDataBlockHandler, logger logx.ILogger, multiReceive bool) IPackSendReceiver
type IPackSender ¶
type IPackSender interface { logx.ILoggerSupport // contains filtered or unexported methods }
func NewPackSender ¶
func NewPackSender(writer IConnWriterAdapter, dataBlockHandler bytex.IDataBlockHandler, logger logx.ILogger) IPackSender
type IPackSenderGetter ¶
type IPackSenderGetter interface {
GetPackSender() IPackSender
}
type IPackSenderSetter ¶
type IPackSenderSetter interface {
SetPackSender(sender IPackSender)
}
type IRPCClient ¶
type IRPCClient interface { // Dial // 连接远程RPC服务 Dial(address string) error // IsConnected // RPC是否处理连接状态 IsConnected() bool // Call // 调用RPC服务 Call(serviceMethod string, args interface{}, reply interface{}) error // Close // 关闭远程RPC服务 Close() }
func NewRPCClient ¶
func NewRPCClient(Network string) IRPCClient
type IRPCServer ¶
type IRPCServer interface { // Register // publishes in the server the set of methods of the receiver value that satisfy the following conditions: Register(rcvr interface{}) error // RegisterName // is like Register but uses the provided name for the type instead of the receiver's concrete type. RegisterName(name string, rcvr interface{}) error // StartServer // 启动RPC服务,会阻塞 StartServer(addr string) // StopServer // 停止RPC服务 StopServer() }
func NewRPCServer ¶
func NewRPCServer() IRPCServer
type IRemoteAddress ¶
type IRemoteAddress interface {
RemoteAddress() string
}
type IServer ¶
type IServer interface { // IsRunning // 服务是否启动中 IsRunning() bool // StartServer // 启动服务,会阻塞 StartServer(params SockParams) error // StopServer // 停止服务,会阻塞 StopServer() error }
type IServerConn ¶ added in v1.0.4
type IServerConnSet ¶ added in v1.0.4
type ISockClient ¶
type ISockClient interface { ISockName IClient IPackReceiver ISockSender LocalAddress() string }
type ISockClientGetter ¶
type ISockClientGetter interface {
GetClient() ISockClient
}
type ISockClientSetter ¶
type ISockClientSetter interface {
SetClient(client ISockClient)
}
type ISockConn ¶
type ISockConn interface { // Close // 关闭 Close() error // LocalAddr // 本地连接地址 LocalAddr() net.Addr // RemoteAddr // 远程连接地址 RemoteAddr() net.Addr }
ISockConn 这个是裁剪接口,函数签名不能改 针对net.Conn、quic.Session、*net.UDPConn、*websocket.Conn
type ISockEventClient ¶ added in v1.0.4
type ISockEventClient interface { eventx.IEventDispatcher ISockClient }
type ISockEventServer ¶ added in v1.0.4
type ISockEventServer interface { eventx.IEventDispatcher ISockServer }
type ISockSender ¶
type ISockSenderGetter ¶
type ISockSenderGetter interface {
GetSockSender() ISockSender
}
type ISockSenderSetter ¶
type ISockSenderSetter interface {
SetSockSender(sockSender ISockSender)
}
type ISockServer ¶
type ISockServer interface { ISockName IServer IServerConnSet ISockSender IPackHandlerContainerSetter IPackHandlerContainerGetter logx.ILoggerSupport }
type ISockServerGetter ¶
type ISockServerGetter interface {
GetSockServer() ISockServer
}
type ISockServerSetter ¶
type ISockServerSetter interface {
SetSockServer(server ISockServer)
}
type NoAddrError ¶
type NoAddrError string
func (NoAddrError) Error ¶
func (e NoAddrError) Error() string
func (NoAddrError) Temporary ¶
func (e NoAddrError) Temporary() bool
func (NoAddrError) Timeout ¶
func (e NoAddrError) Timeout() bool
type PackHandlerContainer ¶
func NewDefaultPackHandler ¶
func NewDefaultPackHandler() *PackHandlerContainer
func NewPackHandler ¶
func NewPackHandler(handlers []FuncPackHandler) *PackHandlerContainer
func (*PackHandlerContainer) AppendPackHandler ¶
func (ph *PackHandlerContainer) AppendPackHandler(handler FuncPackHandler) error
func (*PackHandlerContainer) ClearHandler ¶
func (ph *PackHandlerContainer) ClearHandler(handler FuncPackHandler) error
func (*PackHandlerContainer) ClearHandlers ¶
func (ph *PackHandlerContainer) ClearHandlers() error
func (*PackHandlerContainer) FirstHandler ¶
func (ph *PackHandlerContainer) FirstHandler(first func(handler FuncPackHandler) bool)
func (*PackHandlerContainer) ForEachHandler ¶
func (ph *PackHandlerContainer) ForEachHandler(each func(handler FuncPackHandler) bool)
func (*PackHandlerContainer) LastHandler ¶
func (ph *PackHandlerContainer) LastHandler(first func(handler FuncPackHandler) bool)
func (*PackHandlerContainer) SetPackHandlers ¶
func (ph *PackHandlerContainer) SetPackHandlers(handlers []FuncPackHandler) error
func (*PackHandlerContainer) Size ¶ added in v1.0.4
func (ph *PackHandlerContainer) Size() int
type RPCClient ¶
type RPCClient struct { Network string // contains filtered or unexported fields }
func (*RPCClient) IsConnected ¶
type RPCServer ¶
type RPCServer struct { logx.LoggerSupport Network string Server *rpc.Server Listener net.Listener }
func (*RPCServer) RegisterName ¶
func (*RPCServer) StartServer ¶
func (*RPCServer) StopServer ¶
func (s *RPCServer) StopServer()
type ReadWriterAdapter ¶
func (*ReadWriterAdapter) ReadBytes ¶
func (rw *ReadWriterAdapter) ReadBytes(bytes []byte) (n int, address string, err error)
func (*ReadWriterAdapter) RemoteAddress ¶
func (rw *ReadWriterAdapter) RemoteAddress() string
func (*ReadWriterAdapter) WriteBytes ¶
func (rw *ReadWriterAdapter) WriteBytes(bytes []byte, rAddress ...string) (n int, err error)
type ReaderUnSupportError ¶
type ReaderUnSupportError string
func (ReaderUnSupportError) Error ¶
func (e ReaderUnSupportError) Error() string
func (ReaderUnSupportError) Temporary ¶
func (e ReaderUnSupportError) Temporary() bool
func (ReaderUnSupportError) Timeout ¶
func (e ReaderUnSupportError) Timeout() bool
type ReqCallBack ¶
type SockClientBase ¶
type SockClientBase struct { Name string Network SockNetwork ClientMu sync.RWMutex Opening bool LocalAddr string Conn ISockConn PackProxy IPackSendReceiver Logger logx.ILogger PackHandler IPackHandlerContainer }
func (*SockClientBase) GetLogger ¶
func (o *SockClientBase) GetLogger() logx.ILogger
func (*SockClientBase) GetName ¶
func (o *SockClientBase) GetName() string
func (*SockClientBase) GetPackHandlerContainer ¶
func (o *SockClientBase) GetPackHandlerContainer() IPackHandlerContainer
func (*SockClientBase) IsOpening ¶
func (o *SockClientBase) IsOpening() bool
func (*SockClientBase) IsReceiving ¶
func (o *SockClientBase) IsReceiving() bool
func (*SockClientBase) LocalAddress ¶
func (o *SockClientBase) LocalAddress() string
func (*SockClientBase) SendBytesTo ¶
func (o *SockClientBase) SendBytesTo(bytes []byte, rAddress ...string) error
func (*SockClientBase) SendPackTo ¶
func (o *SockClientBase) SendPackTo(msg []byte, rAddress ...string) error
func (*SockClientBase) SetLogger ¶
func (o *SockClientBase) SetLogger(logger logx.ILogger)
func (*SockClientBase) SetName ¶
func (o *SockClientBase) SetName(name string)
func (*SockClientBase) SetPackHandlerContainer ¶
func (o *SockClientBase) SetPackHandlerContainer(packHandler IPackHandlerContainer)
func (*SockClientBase) StartReceiving ¶
func (o *SockClientBase) StartReceiving() error
func (*SockClientBase) StopReceiving ¶
func (o *SockClientBase) StopReceiving() error
type SockNetwork ¶
type SockNetwork string
const ( Undefined SockNetwork = "" QuicNetwork SockNetwork = "quic" TcpNetwork SockNetwork = "tcp" TcpNetwork4 SockNetwork = "tcp4" TcpNetwork6 SockNetwork = "tcp6" UDPNetwork SockNetwork = "udp" UDPNetwork4 SockNetwork = "udp4" UDPNetwork6 SockNetwork = "udp6" WSNetwork SockNetwork = "websocket" )
func ParseSockNetwork ¶
func ParseSockNetwork(str string) SockNetwork
ParseSockNetwork 字符串转 SockNetwork
func (SockNetwork) NewClient ¶
func (n SockNetwork) NewClient() (server ISockClient, err error)
func (SockNetwork) NewClient2 ¶
func (n SockNetwork) NewClient2() (server ISockClient, err error)
func (SockNetwork) NewServer ¶
func (n SockNetwork) NewServer() (server ISockServer, err error)
func (SockNetwork) String ¶
func (n SockNetwork) String() string
type SockParams ¶
type SockParams struct { Network SockNetwork // E.g // tcp,udp,quic: 127.0.0.1:9999 LocalAddress string // E.g // websocket: ws://127.0.0.1:9999 // tcp,udp,quic: 127.0.0.1:9999 RemoteAddress string // E.g: /,/echo WSPattern string // E.g: http://127.0.0.1/,最后的"/"必须 WSOrigin string // E.g: "" WSProtocol string }
type SockServerBase ¶
type SockServerBase struct { Name string Network SockNetwork ServerMu sync.RWMutex Running bool Logger logx.ILogger PackHandlerContainer IPackHandlerContainer }
func (*SockServerBase) DispatchServerConnCloseEvent ¶
func (s *SockServerBase) DispatchServerConnCloseEvent(dispatcher eventx.IEventDispatcher, address string)
func (*SockServerBase) DispatchServerConnOpenEvent ¶
func (s *SockServerBase) DispatchServerConnOpenEvent(dispatcher eventx.IEventDispatcher, address string)
func (*SockServerBase) DispatchServerStartedEvent ¶
func (s *SockServerBase) DispatchServerStartedEvent(dispatcher eventx.IEventDispatcher)
func (*SockServerBase) DispatchServerStoppedEvent ¶
func (s *SockServerBase) DispatchServerStoppedEvent(dispatcher eventx.IEventDispatcher)
func (*SockServerBase) GetLogger ¶
func (s *SockServerBase) GetLogger() logx.ILogger
func (*SockServerBase) GetName ¶
func (s *SockServerBase) GetName() string
func (*SockServerBase) GetPackHandlerContainer ¶
func (s *SockServerBase) GetPackHandlerContainer() IPackHandlerContainer
func (*SockServerBase) IsRunning ¶
func (s *SockServerBase) IsRunning() bool
func (*SockServerBase) SetLogger ¶
func (s *SockServerBase) SetLogger(logger logx.ILogger)
func (*SockServerBase) SetName ¶
func (s *SockServerBase) SetName(name string)
func (*SockServerBase) SetPackHandlerContainer ¶
func (s *SockServerBase) SetPackHandlerContainer(packHandlerContainer IPackHandlerContainer)
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package quicx Create on 2023/8/5 @author xuzhuoxi
|
Package quicx Create on 2023/8/5 @author xuzhuoxi |
Package tcpx Create on 2023/8/5 @author xuzhuoxi
|
Package tcpx Create on 2023/8/5 @author xuzhuoxi |
Package udpx Create on 2023/8/5 @author xuzhuoxi
|
Package udpx Create on 2023/8/5 @author xuzhuoxi |
Package wsx Create on 2023/8/5 @author xuzhuoxi
|
Package wsx Create on 2023/8/5 @author xuzhuoxi |
Click to show internal directories.
Click to hide internal directories.