C#写一个UDP程序判断延迟并运行在Centos上

这篇具有很好参考价值的文章主要介绍了C#写一个UDP程序判断延迟并运行在Centos上。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

服务端


using System.Net.Sockets;
using System.Net;


int serverPort = 50001;
Socket server;
EndPoint client = new IPEndPoint(IPAddress.Any, 0);//用来保存发送方的ip和端口号

CreateSocket();

void CreateSocket()
{
    server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
    IPAddress ip = IPAddress.Any;
    server.Bind(new IPEndPoint(ip, serverPort));//绑定端口号和IP
    Console.WriteLine("服务端已经开启,监听端口:"+ serverPort);
    Thread t = new Thread(ReciveMsg);//开启接收消息线程
    t.Start();

}

/// <summary>
/// 接收发送给本机ip对应端口号的数据报
/// </summary>
void ReciveMsg()
{
    byte[] buffer = new byte[1024];
    byte[] sendbuffer= new byte[20];
    while (true)
    {
        
        Console.WriteLine("等待接收数据 ...");
        int length = server.ReceiveFrom(buffer, ref client);//接收数据报
        try
        {
            int no = BitConverter.ToInt32(buffer, 0);
            long getd = BitConverter.ToInt64(buffer, 4);

            //string message = Encoding.UTF8.GetString(buffer, 0, length);
            Console.WriteLine(client.ToString() + " : " + no + "," + getd);

			int sz = 0;
            int offset = 0;
            byte[] bno = BitConverter.GetBytes(no);
            sz = 4;
            Array.Copy(bno, 0, sendbuffer,offset, sz);
            offset += sz;
            bno = BitConverter.GetBytes(getd);
            sz = 8;
            Array.Copy(bno, 0, sendbuffer, offset, sz);
       
            server.SendTo(sendbuffer, client);
        }
        catch
        {
            Console.WriteLine("error."+ client.ToString()+","+ buffer.Length.ToString());
        }
    }
}

C#写一个UDP程序判断延迟并运行在Centos上,C#,centos,Linux,c#,udp,centos

注意下端口号,可以使用下面的命令查看是否被占用

netstat -alnp |grep 50001

如果没输出代表没有被使用,注意防火墙开启udp的端口

客户端

#define WLOG

using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Diagnostics;

string serverIp = "192.168.3.76";
int serverPort = 50001;
int lost = 0;   //丢包率
long ping = 0;

Socket client;
EndPoint server;
int sendno = 0; //连续编号



int lostcount = 10;  //丢包百分比数组
int[] losts = new int[lostcount];

EndPoint recivePoint = new IPEndPoint(IPAddress.Any, 0);//用来保存发送方的ip和端口号
CreateClient();




void CreateClient()
{
    for (int i = 0; i < lostcount; i++)
        losts[i] = 1;

    client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
    client.Bind(new IPEndPoint(IPAddress.Any, 0));

    server = new IPEndPoint(IPAddress.Parse(serverIp), serverPort);

    Thread t = new Thread(sendMsg);
    t.Start();

    Thread t2 = new Thread(ReciveMsg);
    t2.Start();
}


void Send()
{
    //发包格式#0编号,1时间
    long milliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();
    List<byte> byteSource = new List<byte>();
    byteSource.AddRange(BitConverter.GetBytes(sendno));
   
    byte[] tick = BitConverter.GetBytes(milliseconds);
    byteSource.AddRange(tick);
    //byte[] sendata = milliseconds.tob Encoding.UTF8.GetBytes("unity hellp");
    byte[] data = byteSource.ToArray();

    client.SendTo(data, server);

    
    losts[sendno % lostcount] = 0;

    sendno++;

    Console.WriteLine("data:"+ milliseconds.ToString()+ ",lost:"+ lost+"%");
}
/// <summary>
/// 向特定ip的主机的端口发送数据报
/// </summary>
void sendMsg()
{

    while (true)
    {
        Send();
        Thread.Sleep(500);
        ComputLost();
        Thread.Sleep(500);
    }
}

void ComputLost()
{
    int all = 0;
    for (int i = 0; i < lostcount; i++)
    {
        if (losts[i] == 0)
            all++;
    }
    lost = (int)(all * 100.0 / lostcount);
}

/// <summary>
/// 接收发送给本机ip对应端口号的数据报
/// </summary>
void ReciveMsg()
{
    byte[] buffer = new byte[1024];
    while (true)
    {
        try
        {
            int length = client.Receive(buffer);//, ref recivePoint);//接收数据报

            int no = BitConverter.ToInt32(buffer, 0);
            long getd = BitConverter.ToInt64(buffer, 4);

           
            long milliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();
            ping = milliseconds - getd;
            losts[no % lostcount] = (int)ping+1;
           
            Console.WriteLine(recivePoint.ToString() + " , no : " + no + " , getd : " + getd + " , ping : " + ping);
        }
        catch(Exception e) 
        {
            Console.WriteLine(e.ToString());
        }
    }
}


其中ping就是发包返回的时间。lost都是发10个包丢了几个。
C#写一个UDP程序判断延迟并运行在Centos上,C#,centos,Linux,c#,udp,centos

在Centos部署

把代码拷贝到centos目录下
C#写一个UDP程序判断延迟并运行在Centos上,C#,centos,Linux,c#,udp,centos
如果没安装dotnet,我们安装运行时就可以了

sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm

sudo yum install dotnet-runtime-7.0

如果直接运行,可以输入

dotnet PingServer.dll

创建服务开机启动

vim /etc/systemd/system/pingserver.service

内容如下

[Unit]
Description=pingserver for centos7

[Service]
WorkingDirectory=/home/pingserver/Release
ExecStart=/usr/bin/dotnet /home/pingserver/Release/PingServer.dll
Restart=always
RestartSec=10  # Restart service after 10 seconds if dotnet service crashes
SyslogIdentifier=dotnet-pingserver
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

可以设置开机启动

systemctl enable pingserver.service

开启和状态

systemctl start pingserver.service
systemctl stop pingserver.service
systemctl status pingserver.service

查看运行日志可以

journalctl -u pingserver.service

显示最近20条
journalctl -u pingserver -n 20

还可以通过其他参数显示需要的,journalctl --help
例如从某个时间开始 
journalctl -u pingserver -S "2023-10-27 11:30:00"
journalctl -u pingserver -S "11:30:00"


注意配置文件如果在windows下编辑,记得换行符要改成LF(unix)格式的utf8才可以。文章来源地址https://www.toymoban.com/news/detail-705021.html

到了这里,关于C#写一个UDP程序判断延迟并运行在Centos上的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CentOS:nohup后台运行jar文件包程序

    1、java -jar XXX.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 2、java -jar XXX.jar  代表在后台运行。 特定:当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。 继续改进,如何让窗口关闭时,程序仍然运行

    2024年01月25日
    浏览(49)
  • C#入门:编写运行第一个C#程序Helloworld

    参考链接: C#入门学习-希里安 在官网下载安装Professional 2022即可. https://visualstudio.microsoft.com/zh-hans/ 下载时选择C#、.Net框架等支持,安装后运行,新建模板选择 Visual C#、Window环境、新建Console控制台应用,为项目命名Helloworld。 下文代码基于菜鸟教程改编。其中,Console.WriteLi

    2024年02月06日
    浏览(47)
  • 【Linux】CentOS制作Java+GDAL环境镜像并部署运行SpringBoot项目

    环境部署是一个非常繁琐又耗时的工作,尤其是涉及更换操作系统时,其难度更是成倍的增加。本文通过构建起软件运行镜像,并将SpringBoot项目运行在容器中,以期减小软件部署工作所投入的时间与精力。 在Windows环境下构建了一个SpringBoot项目,涉及对MySQL数据库、PostgreSQ

    2024年02月11日
    浏览(45)
  • 小插曲 -- 使用Linux编写 判断程序是否在运行的小程序

    首先,在执行“ps -elf |grep xxx”时,如果xxx存在,通常会有两条结果,一个是xxx对应的PID,一个则是grep对应的PID,但是如果 我希望执行命令后,xxx存在就只有xxx对应的PID,不存在就什么都不显示的话 ,可以将指令修改成:“ ps -elf |grep XXX|grep -v grep ”,这样就可以屏蔽显示

    2024年02月07日
    浏览(48)
  • 【linux下安装运行C#程序环境】linux下安装运行C#(dotnet)程序环境

    若yum的数据源不是国内的,速度原因,建议换yum数据源:yum换源操作 先查看系统版本号: 结果: 先添加配置对应的centos版本的C#数据源(此处为7) 可点击链接找到自己需要的系统及版本 https://packages.microsoft.com/config/ 查找需要安装的dotnet-sdk版本 结果: yum安装C#依赖包(此处

    2024年02月14日
    浏览(45)
  • Linux CentOS监控系统的运行情况工具 - top/htop/glances/sar/nmon

    在CentOS系统中,您可以使用以下工具来监控系统的运行情况: 1. top: top 是一个命令行工具,用于实时监控系统的进程、CPU、内存和负载情况。您可以使用以下命令来启动 top: 输出 2. htop: htop 是一个类似 top 的命令行工具,它提供了更多的功能和交互式界面。您可以使用以

    2024年02月15日
    浏览(55)
  • 【Linux|Docker】以CentOS 7为基础镜像制作一个目标镜像(Nginx)

    ==== 需要哪些东西? 1.nginx的安装脚本 install_nginx.sh 源码 https://nginx.org/download/nginx-1.23.3.tar.gz 2.Dockerfile 3.1 准备环境,新建目录 3.2 编写一个编译安装nginx的脚本 为了提高效率,编写一个脚本执行,一次性编译安装好! vim install_nginx.sh 脚本文件内容如下: 3.3 编写Dockerfile 编写

    2024年02月14日
    浏览(48)
  • Centos安装RabbitMQ,JavaSpring发送RabbitMQ延迟延时消息,JavaSpring消费RabbitMQ消息

    erlang 和 rabbitmq 版本说明 https://www.rabbitmq.com/which-erlang.html 确认需要安装的mq版本以及对应的erlang版本。 RabbitMQ下载地址: https://packagecloud.io/rabbitmq/rabbitmq-server Erlang下载地址: https://packagecloud.io/rabbitmq/erlang RabbitMQ延迟消息插件下载 https://github.com/rabbitmq/rabbitmq-delayed-message-exc

    2024年02月08日
    浏览(51)
  • C# 关于使用newlife包将webapi接口寄宿于一个控制台程序、winform程序、wpf程序运行

    C# 关于使用newlife包将webapi接口寄宿于一个控制台程序、winform程序、wpf程序运行 安装newlife包 Program的Main()函数源码 MyController 源码 MyHttpHandler 源码 源代码百度链接 链接:https://pan.baidu.com/s/15OxTDOBO_y5bFyrzPW3XPw?pwd=sr3c 提取码:sr3c

    2024年02月15日
    浏览(52)
  • 【Linux网络】网络编程套接字 -- 基于socket实现一个简单UDP网络程序

    我们把数据从A主机发送到B主机,是目的吗?不是,真正通信的不是这两个机器!其实是这两台机器上面的软件(人) 数据有 IP(公网) 标识一台唯一的主机 ,用谁来标识各自主机上客户或者服务进程的唯一性呢? 为了更好的表示一台主机上服务进程的唯一性,我们采用 端口号

    2024年02月12日
    浏览(159)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包