专栏首页跟着阿笨一起玩NETc#通过socket判断服务器连接是否正常

c#通过socket判断服务器连接是否正常

判断Socket是否连接上,需要通过发包来确认。
之前确认都是调用调用socket的connected属性,然而该属性是上次的连接是否成功的结果,不及时。


// 检查一个Socket是否可连接
        private bool IsSocketConnected(Socket client)
        {
            bool blockingState = client.Blocking;
            try
            {
                byte[] tmp = new byte[1];
                client.Blocking = false;
                client.Send(tmp, 0, 0);
                return true;
            }
            catch (SocketException e)
            {
                // 产生 10035 == WSAEWOULDBLOCK 错误,说明被阻止了,但是还是连接的
                if (e.NativeErrorCode.Equals(10035))
                    return false;
                else
                    return true;
            }
            finally
            {
                client.Blocking = blockingState;    // 恢复状态
            }
        }
C#客户端连接服务器前先判断服务器连接是否正常

        #region 采用Socket方式,测试服务器连接 
        /// <summary> 
        /// 采用Socket方式,测试服务器连接 
        /// </summary> 
        /// <param name="host">服务器主机名或IP</param> 
        /// <param name="port">端口号</param> 
        /// <param name="millisecondsTimeout">等待时间:毫秒</param> 
        /// <returns></returns> 
        public static bool TestConnection(string host,int port,int millisecondsTimeout)
        {
            int millisecondsTimeout = 5;//等待时间
            TcpClient client = new TcpClient();
            try
            {
                var ar = client.BeginConnect(host, port, null, null);
                ar.AsyncWaitHandle.WaitOne(millisecondsTimeout);
                return client.Connected;
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                client.Close();
            }
        }
        #endregion

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [C#] 常用工具类——加密解密类

    跟着阿笨一起玩NET
  • NPOI简述与运用

    最近想把项目中Excel中的操作部分改成NPOI ,由于2.0版本已经支持office07/10格式,但还处于测试版不稳定,于是封装如下代码

    跟着阿笨一起玩NET
  • DataTable.Select 返回DataTable

    在实际编程工程中,常常遇到这样的情况:DataTable并不是数据库中的,或者DataTable尚未写到数据库,或者从数据库中读出的DataTable已经在本地...

    跟着阿笨一起玩NET
  • BNUOJ 44578 Monty Hall problem

    蒙提霍尔问题,亦称为蒙特霍问题或三门问题(Monty Hall problem),是一个源自博弈论的数学游戏问题. 这个游戏的玩法是:参赛者会看见三扇关闭了...

    谙忆
  • 详解Python中re.sub

    re.sub是个正则表达式方面的函数,用来实现通过正则表达式,实现比普通字符串的replace更加强大的替换功能;

    py3study
  • TST 携手腾讯直享直播首秀成绩破亿!

    如果说2019年是电商直播的元年,各大平台纷纷入场,那么2020年则是直播带货正式爆发的一年。 年初的一场疫情放缓了几乎所有产业的发展脚步,但对直播电商行业却...

    腾讯即时通信IM
  • 代码整洁之道-对象和数据结构

    有人看了,你这抽象的有问题啊,很明显是面向过程的,如果新加一个类型,Geometry类中的所有方法都要修改。嗯,却是是这样,但反过来想,如果新加一个方法,所有现...

    烟草的香味
  • New UWP Community Toolkit - RadialGauge

    概述 New UWP Community Toolkit  V2.2.0 的版本发布日志中提到了 RadialGauge 的调整,本篇我们结合代码详细讲解  R...

    Shao Meng
  • 科学瞎想系列之四十七 时空穿越

    这个话题可能许多宝宝们都感兴趣,关于时空穿越的故事,宝宝们在科幻电影和小说里经常见到,好奇心驱使人们希望穿越到过去,利用自己已经知道的历史去给过去的人们指点...

    标准答案
  • loadrunner 脚本录制-Protocol Advisor协议分析器的使用

    File > Protocol Advisor > Analyze Application,填写相关信息,比如下图,然后点击OK

    授客

扫码关注云+社区

领取腾讯云代金券