SuperSocket 服务器与客户端双向通讯

1、使用AppSession 的Send方法就可以向连接到的客户端发送数据。服务器端代码如下。

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 ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建一个AppServer实例
            var appServer = new AppServer();

            //安装和监听端口
            if (!appServer.Setup(2024))
            {
                //输出失败信息
                Console.WriteLine("安装和监听端口失败!");
                //等待用户输入
                Console.ReadKey();
                return;
            }

            Console.WriteLine("安装和监听端口成功,请输入Start开启服务器");

            while (!Console.ReadLine().Equals("Start"))
            {
                Console.WriteLine();
                continue;
            }

            //启动AppServer实例
            if (!appServer.Start())
            {
                //输出失败信息
                Console.WriteLine("启动AppServer实例失败!");
                Console.ReadKey();
                return;
            }

            Console.WriteLine("服务器启动成功,请输入Stop停止服务器");

            // 客户端连接服务器事件
            appServer.NewSessionConnected += AppServer_NewSessionConnected;
            // 接收到客户端发送的数据
            appServer.NewRequestReceived += AppServer_NewRequestReceived;
            // 客户端关闭
            appServer.SessionClosed += AppServer_SessionClosed;

            while (!Console.ReadLine().Equals("Stop"))
            {
                Console.WriteLine();
                continue;
            }

            appServer.Stop();
            Console.WriteLine("服务器已停止。");
            Console.ReadKey();

        }
        /// <summary>
        /// 客户端连接服务器事件
        /// </summary>
        /// <param name="session"></param>
        private static void AppServer_NewSessionConnected(AppSession session)
        {
            Console.WriteLine("新客户端已连接IP地址为:" + session.RemoteEndPoint.Address.ToString());
            session.Send("Welcome");
        }
        /// <summary>
        /// 接收到客户端发送的数据
        /// </summary>
        /// <param name="session"></param>
        /// <param name="requestInfo"></param>
        private static void AppServer_NewRequestReceived(AppSession session, StringRequestInfo requestInfo)
        {
            var key = requestInfo.Key;
            var body = requestInfo.Body;
            var parameters=requestInfo.Parameters;
            switch (key)
            {
                case "1":
                    Console.WriteLine("收到客户端信息1。");
                    session.Send("Received:" + key.ToString());
                    break;
                default:
                    Console.WriteLine("收到key:"+key.ToString());
                    Console.WriteLine("收到body:" + body.ToString());
                    for (int i = 0; i < parameters.Length; i++)
                    {
                        Console.WriteLine("收到parameters:" + parameters[i]);
                    }
                   
                    session.Send("Received Key:" + key.ToString());
                    session.Send("Received Body:" + body.ToString());
                    for (int i = 0; i < parameters.Length; i++)
                    {
                        session.Send("Received parameters:" + parameters[i]);
                    }
                    break;
            }
        }

        /// <summary>
        /// 客户端关闭
        /// </summary>
        /// <param name="session"></param>
        /// <param name="value"></param>
        private static void AppServer_SessionClosed(AppSession session, CloseReason value)
        {
            Console.WriteLine("IP地址为:" + session.RemoteEndPoint.Address.ToString()+ "客户端已下线");
        }
    }
}

2、通讯效果如下图。需要注意的是2和123之间必须有一个空格。

3、客户端发送数据解析。

3.1、requestInfo.Key 是请求的命令行用空格分隔开的第一部分  。           

3.2、requestInfo.Parameters 是用空格分隔开的其余部分,用空格分割开的字符串数组  。         

3.3、requestInfo.Body 是出了请求头之外的所有内容,是一个字符串。

3.4、数据情况如下图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/674483.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】逻辑回归:原理、应用与实践

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 逻辑回归&#xff1a;原理、应用与实践引言1. 逻辑回归基础1.1 基本概念1.2 Sig…

leetCode-hot100-二分查找专题

二分查找 简介原理分析易错点分析例题33.搜索旋转排序数组34.在排序数组中查找元素的第一个和最后一个位置35.搜索插入位置240.搜索二维矩阵 Ⅱ 简介 二分查找&#xff0c;是指在有序&#xff08;升序/降序&#xff09;数组查找符合条件的元素&#xff0c;或者确定某个区间左右…

HTML静态网页成品作业(HTML+CSS)—— 香奈儿香水介绍网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

关于Acrel-2000E配电室综合监控系统的实际应用分析-安科瑞 蒋静

摘要:“三大工程”指的是保障性住房建设、“平急两用”公共基础设施建设、城中村改造&#xff0c;是我国在建设领域作出的重大决策部署&#xff0c;是根据房地产市场新形势推出的重要举措。其中城中村改造是解决群众急难愁盼问题的重大民生工程&#xff0c;该工程中配电房的建设…

新闻发稿:8个新闻媒体推广中最常见的错误-华媒舍

在数字时代&#xff0c;新闻媒体的推广手段已经越来越多样化。许多媒体在推广过程中常常会犯下一些常见错误。本文将会介绍八个新闻媒体在推广中最常见的错误&#xff0c;并希望能够帮助各位更好地规避这些问题。 1. 缺乏明确的目标受众 在进行推广前&#xff0c;新闻媒体需要…

华为OD机试 - 最大坐标值(Java 2024 D卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

将HTML页面中的table表格元素转换为矩形,计算出每个单元格的宽高以及左上角坐标点,输出为json数据

export function huoQuTableElement() {const tableData []; // 存储表格数据的数组let res [];// 获取到包含表格的foreignObject元素const foreignObject document.getElementById(mydctable);if (!foreignObject){return ;}// 获取到表格元素let oldTable foreignObject…

Orange AIpro开箱上手

0.介绍 首先感谢官方给到机会&#xff0c;有幸参加这次活动。 OrangePi AIpro(8T)采用昇腾AI技术路线&#xff0c;具体为4核64位处理器AI处理器&#xff0c;集成图形处理器&#xff0c;支持8TOPS AI算力&#xff0c;拥有8GB/16GB LPDDR4X&#xff0c;可以外接32GB/64GB/128GB/2…

从小众到主流:KOC如何凭借微影响力塑造品牌传播新格局

随着数字化的飞速发展&#xff0c;KOC作为社交媒体上的一股新兴力量&#xff0c;正以其微小的粉丝基数和高度互动性&#xff0c;引发一场微影响力革命。与传统的KOL不同&#xff0c;KOC通常拥有较小的粉丝基数&#xff0c;但却能够凭借高度互动性和真实的消费者体验&#xff0c…

编写一个问卷界面 并用JavaScript来验证表单内容

倘若文章和代码中有任何错误或疑惑&#xff0c;欢迎提出交流哦~ 简单的html和css初始化 今天使用JavaScript来实现对表单输入的验证&#xff0c; 首先写出html代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset&qu…

FY-SA-20237·8-WhyWeSpin

Translated from the Scientific American, July/August 2023 issue. Why We Spin (我们为什么旋转) Primates may play with reality by twirling around 翻译&#xff1a;灵长类动物有能力通过旋转或旋转运动来操纵或扭曲他们对现实的感知。 解释&#xff1a; “Primates”…

跟着大佬学RE(二)

[ACTF新生赛2020]easyre enc~}|{zyxwvutsrqponmlkjihgfedcba_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA?><;:9876543210/.-,*)(\0x27&%$# !" v4*F\"N,\"(I? v4list(map(ord,v4)) print(v4) #( v4[i] ! _data_start__[*((char *)v5 i) - 1] ) flaglist(ACTF…

光猫、路由器的路由模式、桥接模式、拨号上网

下面提到的路由器都是家用路由器 一、联网条件 1.每台电脑、路由器、光猫想要上网&#xff0c;都必须有ip地址。 2.电脑获取ip 可以设置静态ip 或 向DHCP服务器(集成在路由器上) 请求ip 电话线上网时期&#xff0c;猫只负责模拟信号和数字信号的转换&#xff0c;电脑需要使…

折半查找二分查找

简介 折半查找也就是二分查找&#xff0c;也可以叫二分法&#xff0c;本质上都是一样的&#xff0c;通过比对中间值与目标值&#xff0c;一次性就能筛掉一半的数字。 举例&#xff1a; 一个猜数字游戏&#xff0c;让你来猜1-100中我选中的数&#xff0c;如果猜中游戏结束&…

EE trade:量化交易需要什么条件才能做

量化交易结合了金融市场知识和计算机科学技术&#xff0c;利用数学和统计模型来进行交易决策。要成功进行量化交易&#xff0c;需要具备以下几个方面的条件&#xff1a; 1. 知识和技能 金融市场知识&#xff1a;需要理解金融市场的基本原理&#xff0c;包括股票、债券、期货、…

学会读书并不简单,如何真正学会读书

一、教程描述 读书是要讲究方法的&#xff0c;否则就会事倍功半&#xff0c;比如&#xff0c;在学习书本上的每一个问题每一章节的时候&#xff0c;首先应当不只看到书面上&#xff0c;而且还要看到书背后的东西&#xff0c;在对书中每一个问题都经过细嚼慢咽&#xff0c;其次…

AI对话聊天软件有哪些?这5款AI软件值得推荐

AI对话聊天软件有哪些&#xff1f;AI对话聊天软件在现代社会中的重要性日益凸显。它们不仅是沟通的工具&#xff0c;更是人们日常生活中的智能助手。通过深度学习和自然语言处理技术&#xff0c;这些软件能够理解我们的意图&#xff0c;提供个性化的建议和服务&#xff0c;让交…

电生明火电火灶是高科技革命还是营销噱头?

电火灶&#xff0c;一个近年来逐渐进入公众视野的新型厨房烹饪设备&#xff0c;凭借其电生明火的独特技术引起了广泛的讨论和关注。然而&#xff0c;关于其是否真正代表高科技革命&#xff0c;还是仅仅是一个营销噱头&#xff0c;外界众说纷纭。今天&#xff0c;我们就来深度解…

在gitlab上发布npm二进制文件

❝ 允许奇迹发生 ❞ 大家好&#xff0c;我是「柒八九」。一个「专注于前端开发技术/Rust及AI应用知识分享」的Coder。 前言 还记得之前我们讲过如何在 npm 上发布二进制文件&#xff1f;吗。我们通过npm将我们之前在Rust 赋能前端-开发一款属于你的前端脚手架中生成Rust二进制文…

进程通信——管道

什么是进程通信&#xff1f; 进程通信是实现进程间传递数据信息的机制。要实现数据信息传递就要进程间共享资源——内存空间。那么是哪块内存空间呢&#xff1f;进程间是相互独立的&#xff0c;一个进程不可能访问其他进程的内存空间&#xff0c;那么这块空间只能由操作系统提…