C# SuperSocket 手把手教你入门 傻瓜教程---2(服务器和客户端双向通信)

36 篇文章 44 订阅

C# SuperSocket 手把手教你入门 傻瓜教程系列教程

C# SuperSocket 手把手教你入门 傻瓜教程---1(服务器单向接收客户端发送数据)

C# SuperSocket 手把手教你入门 傻瓜教程---2(服务器和客户端双向通信)

C# SuperSocket 手把手教你入门 傻瓜教程---3(Telnet服务器和客户端请求处理)

C# SuperSocket 手把手教你入门 傻瓜教程---4(创建一个服务器和多客户端双向通信程序)

C# SuperSocket 手把手教你入门 傻瓜教程---5(探索自定义AppServer、AppSession,Conmmand,用配置文件App.comfig启动服务器) 

C# SuperSocket 手把手教你入门 傻瓜教程---6(CommandLineProtocol---命令行协议) 

C# SuperSocket 手把手教你入门 傻瓜教程---7(自定义CommandLineProtocol---命令行协议)

C# SuperSocket 手把手教你入门 傻瓜教程-8(TerminatorReceiveFilter - 结束符协议) 

目录

 一、安装SuperSocket组件

二、服务器检测到新连接时给客户端发送数据

三、服务器在会话事件处理方法中给客户端发送数据

四、源程序


        上一个教程:

                        C# SuperSocket 手把手教你入门 傻瓜教程---1(服务器单向接收客户端发送数据)

        仅仅实现客户端将报文发送给服务器,服务器收到客户端的数据后打印输出到控制台窗口,还没有实现服务器如何给客户端发送数据。

        下面就简要介绍服务器如何给客户端发送数据。

         服务器给客户端发送数据,只需要使用Session的Send方法即可实现。

 一、安装SuperSocket组件

        安装SuperSocket组件请参见上一篇文章。C# SuperSocket 手把手教你入门 傻瓜教程---1(服务器单向接收客户端发送数据)

二、服务器检测到新连接时给客户端发送数据

       上一个教程(C# SuperSocket 手把手教你入门 傻瓜教程---1(服务器单向接收客户端发送数据)服务器检测到客户端创建了一个新连接时,仅仅在控制台窗口打印输出““已连接!”+客户端IP地址。

        现在我们改造一下,当服务器检测到客户端创建了一个新连接时,不仅在控制台窗口打印输出“Connect Success!”+客户端IP地址+连接号,而且服务器还给客户端发送数据“Connect Success!”+客户端IP地址+连接号。

         改造后的新连接方法程序代码如下:

   static void appServer_NewSessionConnected(AppSession session)
   {
       Console.WriteLine("Connect Success!  " + session.RemoteEndPoint);
       session.Send("Connect Success!  " + session.RemoteEndPoint);
   }

       验证:

        下面是运行效果,当先运行服务器程序,然后运行SocketTool工具软件, SocketTool工具连接服务器的IP地址输入127.0.0.1,端口号输入2021 ,SocketTool工具软件上点击【连接】按钮后:

        (1)、服务器的控制台窗口打印输出“Connect Success!  127.0.0.1:50173”  

        (2)、服务器给客户端发送数据“Connect Success!  127.0.0.1:50173”  

三、服务器在会话事件处理方法中给客户端发送数据

       上一个教程(C# SuperSocket 手把手教你入门 傻瓜教程---1(服务器单向接收客户端发送数据)服务器在会话事件处理方法检测到客户端给服务器发送数据的key为1时,仅仅在控制台窗口打印输出“Hello World”。检测到客户端给服务器发送数据的key为2时,仅仅在控制台窗口打印输出“SuperSocket Demo”。检测到客户端给服务器发送数据的key为3时,仅仅在控制台窗口打印输出客户端发送的数据。

        现在我们改造一下:

        1、服务器在会话事件处理方法检测到客户端给服务器发送数据的key为1时

             (1)、在控制台窗口打印输出“Hello World”。

             (2)、服务器给客户端发送数据“1. Hello Word”。

        2、服务器在会话事件处理方法检测到客户端给服务器发送数据的key为2时

             (1)、在控制台窗口打印输出“SuperSocket Demo”。

             (2)、服务器给客户端发送数据“2. SuperSocket Demo”。

        3、服务器在会话事件处理方法检测到客户端给服务器发送数据的key为3时

             (1)、在控制台窗口打印输出客户端发送的数据。

             (2)、服务器给客户端发送数据客户端发送的数据。

         改造后的会话事件处理方法程序代码如下:

static void appServer_NewRequestReceived(AppSession session, SuperSocket.SocketBase.Protocol.StringRequestInfo requestInfo)
        {
            var key = requestInfo.Key;
            var body = requestInfo.Body;

            switch (key)
            {
                case "1":
                    Console.WriteLine("Hello Word");
                    session.Send("1. Hello Word");
                    break;
                case "2":
                    Console.WriteLine("SuperSocket Demo");
                    session.Send("2. SuperSocket Demo");
                    break;
                case "3":
                    Console.WriteLine(body);
                    session.Send(body);
                    break;
            }
        }

       验证:

         下面是运行效果,当先运行服务器程序,然后运行SocketTool工具软件, SocketTool工具连接服务器的IP地址输入127.0.0.1,端口号输入2021 ,然后SocketTool工具软件上点击【连接】按钮,服务器和客户端连接成功。

 1、SocketTool工具发送数据"1"

        在SocketTool工具输入发送数据“1”(警告:输入数字1后,必须要按回车键,因为SuperSocket要求报文的结束符必须是\r\n,否则不予处理)

        我们观察到客户端发送数据“1”后,服务器在控制台窗口打印输出“Hello World”,然后服务器给客户端发送数据“1. Hello Word”。

2、SocketTool工具发送数据"2"

        在SocketTool工具输入发送数据“2”(警告:输入数字2后,必须要按回车键,因为SuperSocket要求报文的结束符必须是\r\n,否则不予处理)

        我们观察到客户端发送数据“2”后,服务器在控制台窗口打印输出“ SuperSocket Demo”,然后服务器给客户端发送数据“2. SuperSocket Demo”。

 3、SocketTool工具发送数据"3 I love SuperSocket"

        在SocketTool工具输入发送数据“3 I love SuperSocket”(警告:输入“3 I love SuperSocket”后,必须要按回车键,因为SuperSocket要求报文的结束符必须是\r\n,否则不予处理;另外3和I之间必须有1个空格)

        我们观察到客户端发送数据“3 I love SuperSocket”后,服务器在控制台窗口打印输出“I love SuperSocket”,然后服务器给客户端发送数据“I love SuperSocket”。

        验证完毕,服务器给客户端发送数据OK。

四、源程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using SuperSocket.Common;
using SuperSocket.SocketBase;
using SuperSocket.SocketBase.Protocol;


namespace SuperSocket服务器和客户端双向通信
{
    class Program
    {
        static void Main(string[] args)
        {

            var appServer = new AppServer();

            if (!appServer.Setup(2021)) // Setup with listening port
            {
                Console.WriteLine("Failed to Setup!");
                Console.ReadKey();
                return;
            }
            Console.WriteLine();

            if (!appServer.Start())  //Try to start the appServer
            {
                Console.WriteLine("Failed to start!");
                Console.ReadKey();
                return;
            }
            Console.WriteLine("The server started successfully, press key 'q' to stop it!");

            //SuperSocket自定义了三个事件 ,连接事件,接收事件,关闭事件
            appServer.NewSessionConnected += appServer_NewSessionConnected; //连接事件
            appServer.NewRequestReceived += appServer_NewRequestReceived;   //接收事件
            appServer.SessionClosed += appServer_SessionClosed;             //关闭事件


            while (Console.ReadKey().KeyChar != 'q')
            {
                Console.WriteLine();
                continue;
            }

            appServer.Stop();
            Console.WriteLine("The Server was stopped!");
            Console.ReadKey();
        }


        static void appServer_NewSessionConnected(AppSession session)
        {
            Console.WriteLine("已连接!  " + session.RemoteEndPoint);
            session.Send("Connect Success!  " + session.RemoteEndPoint);
        }


        static void appServer_NewRequestReceived(AppSession session, SuperSocket.SocketBase.Protocol.StringRequestInfo requestInfo)
        {
            var key = requestInfo.Key;
            var body = requestInfo.Body;

            switch (key)
            {
                case "1":
                    Console.WriteLine("Hello Word");
                    session.Send("1. Hello World");
                    break;
                case "2":
                    Console.WriteLine("SuperSocket Demo");
                    session.Send("2. SuperScoket Demo");
                    break;
                case "3":
                    Console.WriteLine(body);
                    session.Send(body);
                    break;
             }
        }


        static void appServer_SessionClosed(AppSession session, CloseReason value)
        {
            string ipAddress_Close = session.RemoteEndPoint.ToString();

            Console.WriteLine("已关闭连接!  " + ipAddress_Close);
        }
    }
}

源程序参见如下链接:

C#SuperSocket手把手教你入门傻瓜教程(二).zip_supersocket教程-互联网文档类资源-CSDN下载

源程序中包含SocketTool.exe TCP&UPD测试工具

开发工具为:Visual Studio 2017

致谢:

      SuperSocket - 随笔分类 - 黄昏前黎明后 - 博客园 (cnblogs.com)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值