首页 > 编程语言 >LYT-C#-Socket-ServerTEST

LYT-C#-Socket-ServerTEST

时间:2023-04-15 11:56:29浏览次数:37  
标签:LYT Console Socket C# System timer using socket

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

namespace Crltest
{
   public class Program
    {
        static string msg = null;
        static void Main(string[] args)
        {
            //创建一个新的Socket,这里我们使用最常用的基于TCP的Stream Socket(流式套接字)
            var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            //将该socket绑定到主机上面的某个端口
            //方法参考:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.bind.aspx
            socket.Bind(new IPEndPoint(IPAddress.Any, 4530));

            //启动监听,并且设置一个最大的队列长度
            //方法参考:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.listen(v=VS.100).aspx
            socket.Listen(4);

            //开始接受客户端连接请求
            //方法参考:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.beginaccept.aspx
            socket.BeginAccept(new AsyncCallback((ar) =>
            {
                //这就是客户端的Socket实例,我们后续可以将其保存起来
                var client = socket.EndAccept(ar);

                //给客户端发送一个欢迎消息

                client.Send(Encoding.Unicode.GetBytes("Hi there, I accept you request at " + DateTime.Now.ToString()));


                //实现每隔两秒钟给服务器发一个消息
                //这里我们使用了一个定时器
                var timer = new System.Timers.Timer();
                timer.Interval = 2000D;
                timer.Enabled = true;
                timer.Elapsed += (o, a) =>
                {
                    //检测客户端Socket的状态
                    if (client.Connected)
                    {
                        try
                        {
                            string strA = Console.ReadLine();
                            client.Send(Encoding.Unicode.GetBytes(strA));
                            //client.Send(Encoding.Unicode.GetBytes("Message from server at " + DateTime.Now.ToString()));
                        }
                        catch (SocketException ex)
                        {
                            Console.WriteLine(ex.Message);
                        }
                    }
                    else
                    {
                        timer.Stop();
                        timer.Enabled = false;
                        Console.WriteLine("Client is disconnected, the timer is stop.");
                    }
                };
                timer.Start();


                //接收客户端的消息(这个和在客户端实现的方式是一样的)
                client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), client);

            }), null);


            Console.WriteLine("Server is ready!");
            while (true)
            {
                if (msg == "1\0")
                {
                    Console.WriteLine("111111111111111111111111111111111111");
                    msg = "0";
                }
            }
            Console.Read();
        }

        static byte[] buffer = new byte[1024];

        public static void ReceiveMessage(IAsyncResult ar)
        {
            try
            {
                var socket = ar.AsyncState as Socket;

                //方法参考:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.endreceive.aspx
                var length = socket.EndReceive(ar);
                //读取出来消息内容
                msg = Encoding.Unicode.GetString(buffer, 0, length);
                //显示消息
                Console.WriteLine(msg);

                //接收下一个消息(因为这是一个递归的调用,所以这样就可以一直接收消息了)
                socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), socket);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    
    }
}

 

标签:LYT,Console,Socket,C#,System,timer,using,socket
From: https://www.cnblogs.com/ViolinHuang/p/17320803.html

相关文章

  • 数据可视化引擎 G2 v5.0.0-rc.2 发布
    导读数据可视化引擎G2v5.0.0-rc.2发布,具体更新如下文数据可视化引擎G2v5.0.0-rc.2版本现已发布,具体更新内容包括:What'sChangedfix:捕获渲染异常并抛出#4777fix(texts):更新快照#4780fix(animation):关键帧#4783docs:添加迁移#4784feat:适应gui0.5.0-al......
  • c# 远程连接局域网数据库方法
    #region远程数据库连接测试//需给远程数据库分配所有权限//cmd命令:grantallprivilegeson*.*to'root'@'%'withgrantoption;stringconnStr="Database=MyDataBase;DataSource="+"192.168.2.206"+"......
  • Python Web全栈工程师「课代表itspcool」
    PythonWeb全栈工程师核心代码,注释必读//下、栽、课、呈茄/:itspcool进入Python世界,打开编程之门Python语法基础一、标识符所谓的标识符就是对变量、常量、函数、类等对象起的名字。首先必须说明的是,Python语言在任何场景都严格区分大小写!Python对于标识符的命名......
  • D. Connected Components
    D.ConnectedComponentshttps://www.codeforces.com/contest/292/problem/D 思路由于需要删除任意连续段的连接线,引入前缀和连续段的左右两边都需要,所以引入两个前缀和。 https://blog.csdn.net/qq_28954601/article/details/79281640Codehttps://blog.csdn.net/q......
  • nvim-dap C++ cpptools
    https://github.com/microsoft/vscode-cpptoolsgccgdblocaldap=require("dap")dap.adapters.cppdbg={id='cppdbg',type='executable',command='c:\\gnu\\tool\\cpptools\\extension\\debugAdapters\......
  • 删除无效的括号(广度优先搜索、字符串)、计算右侧小于当前元素的个数(树状数组、线段
    删除无效的括号(广度优先搜索、字符串)给你一个由若干括号和字母组成的字符串s,删除最小数量的无效括号,使得输入的字符串有效。返回所有可能的结果。答案可以按任意顺序返回。示例1:输入:s="()())()"输出:["(())()","()()()"]示例2:输入:s="(a)())()"输出:["(a())()","(......
  • ASEMI代理ADA4940-1ACPZ-R7原装ADI车规级ADA4940-1ACPZ-R7
    编辑:llASEMI代理ADA4940-1ACPZ-R7原装ADI车规级ADA4940-1ACPZ-R7型号:ADA4940-1ACPZ-R7品牌:ADI/亚德诺封装:LFCSP-16批号:2023+引脚数量:16安装类型:表面贴装型ADA4940-1ACPZ-R7汽车芯片ADA4940-1ACPZ-R7特征小信号带宽:260MHz超低功率1.25mA极低谐波失真−122dBTHD,50kHz时1MHz时的......
  • on duplicate key update的用法
    1.基础用法test表有如下数据执行如下sql会报主键冲突INSERTINTOtest(id,NAME,age)VALUES(1,'张三',13)增加onduplicatekeyupdate后执行成功INSERTINTOtest(id,NAME,age)VALUES(1,'张三',13) ONDUPLICATEKEYUPDATEid=1, NAME='张三', ag......
  • crontab 命令
    一. 计划任务用途:  按照设置的时间间隔,为用户反复执行某一项固定的系统任务软件包:cronie、crontabs系统服务:crond日志文件:/var/log/cronu 使用 crontab 命令– 编辑:crontab -e [-u 用户名]– 查看:crontab -l [-u 用户名]– 清除:crontab -r [-u 用户名]u 计划任......
  • 用CTGAN生成真实世界的表格数据
    随着CLIP和稳定模型的快速发展,图像生成领域中GAN已经不常见了,但是在表格数据中GAN还是可以看到它的身影。现实世界的复杂性与许多方面相关(例如,缺失数据、不平衡数据、噪声数据),但最常见的一个问题是包含异构(或“混合”)数据,即包含数字和分类特征的数据。由于每种特征类型都可......