Skip to content

使用入门

Henry edited this page Oct 11, 2019 · 1 revision

组件提供了非常方便的流操作方式,可以让TCP通讯数据操作和操作内存或文件一样方便。以下通过使用组件构建一个简单HelloWorld通讯服务。

构建控制台应用

image

添加组件

image

服务定义

组件定义服务需要实现一些规则,规则主要是用来控制连接和数据接收处理,具体如下:

    public interface IServerHandler
    {
        void Connecting(IServer server, EventArgs.ConnectingEventArgs e);

        void Connected(IServer server, EventArgs.ConnectedEventArgs e);

        void Log(IServer server, EventArgs.ServerLogEventArgs e);

        void Error(IServer server, EventArgs.ServerErrorEventArgs e);

        void SessionReceive(IServer server, SessionReceiveEventArgs e);

        void SessionPacketDecodeCompleted(IServer server, EventArgs.PacketDecodeCompletedEventArgs e);

        void Disconnect(IServer server, EventArgs.SessionEventArgs e);

        void SessionDetection(IServer server, SessionDetectionEventArgs e);

    }

这里就不详解了,后面会慢慢用到。

实现

其实组件已经提供了这一接口的基础实现类,如果不是特别需要的情况下没有必要现重新实现。

    class Program : ServerHandlerBase
    {
        private static IServer server;
        public static void Main(string[] args)
        {
            server = SocketFactory.CreateTcpServer<Program>();
            //server.Options.DefaultListen.Port =9090;
            //server.Options.DefaultListen.Host = "127.0.0.1";
            server.Open();
            Console.Read();
        }
        public override void SessionReceive(IServer server, SessionReceiveEventArgs e)
        {
            var pipeStream = e.Stream.ToPipeStream();
            if (pipeStream.TryReadLine(out string line))
            {
                Console.WriteLine(name);
                e.Session.Stream.ToPipeStream().WriteLine("hello " + name);
                e.Session.Stream.Flush();
            }
            base.SessionReceive(server, e);
        }
    }

以上代码是在IPAddress.Ayn9090端口上构建一个TCP服务,服务相关处理工作由继承了ServerHandlerBaseProgram来处理。

数据接收

通过重写SessionReceive方法来获取接收的数据处理,以上代码是从当前数据流尝试获取一行字符,如果成功则打印相关信息并响应回去。

启动服务日志

image

日志会显示程序加载的情况,这样一个TCP服务不编写完成。

客户端调用

为了方便演示,同样也用组件的Client模式进行调用处理

    class Program
    {
        static void Main(string[] args)
        {
            TcpClient client = SocketFactory.CreateClient<TcpClient>("127.0.0.1", 9090);
            while (true)
            {
                Console.Write("Enter Name:");
                var line = Console.ReadLine();
                client.Stream.ToPipeStream().WriteLine(line);
                client.Stream.Flush();
                var reader = client.Receive();
                line = reader.ReadLine();
                Console.WriteLine(line);
            }
        }
    }

运行结果

image