首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • C#怎么判断网线掉线啦 [已结帖,结帖人:xyken]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xyken
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-10-28 20:19:14 楼主
    C#怎么判断网线掉线啦
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ChargeForward
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 20:32:151楼 得分:0
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liang4571231
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 21:35:072楼 得分:0
    dingding
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xuedisheng
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-29 13:29:553楼 得分:0
    做一个sock程序,如果断线了。会产生一个try 你捕捉到这个try就可以了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hake303
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-29 14:16:004楼 得分:0
    做Socket,用try捕获异常,在拔掉网线时,可以捕获,但如果是网线没拔,而是网络断开了,好像就不能直接捕获了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Koala_sea
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-29 14:43:305楼 得分:0
    楼上说的对,我遇到过。只有非正常的情况下可以捕获。正常情况下,是捕获不到的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wuqiubin
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 08:14:066楼 得分:3
    用这段代码就可以判断
    uint dummy = 0;
    byte[] inOptionValues = new byte[Marshal.SizeOf(dummy) * 3];
    BitConverter.GetBytes((uint)1).CopyTo(inOptionValues, 0);
    BitConverter.GetBytes((uint)1500).CopyTo(inOptionValues, Marshal.SizeOf(dummy));
    BitConverter.GetBytes((uint)8000).CopyTo(inOptionValues, Marshal.SizeOf(dummy) * 2);
    newRemoteSocket.IOControl(IOControlCode.KeepAliveValues, inOptionValues, null);
    //struct tcp_keepalive
    //{
    //    u_long  onoff; //是否启用Keep-Alive
    //    u_long  keepalivetime; //多长时间后开始第一次探测(单位:毫秒)
    //    u_long  keepaliveinterval; //探测时间间隔(单位:毫秒)
    //};
    记得加分啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fangchj2002
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 08:17:457楼 得分:0
    写的很好
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • crazyhardy
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 08:31:538楼 得分:0
    直接PING。PING不通就表示断网了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dangerous123
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 08:35:139楼 得分:0
    直接ping肯定是不行的,如果人家禁止了ping入呢.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • greystar
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 08:41:0510楼 得分:2
    NetworkInterface.OperationalStatus

    提供网络接口的配置和统计信息
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • greystar
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 08:42:2111楼 得分:1
    NetworkInterface.GetIsNetworkAvailable ()
    如果网络连接可用,则为 true;否则为 false。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wsw0515
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 09:08:0212楼 得分:0
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sunboyyun
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 09:37:3313楼 得分:3
    public static void AcceptThread()
            ...{
                Thread.CurrentThread.IsBackground = true;
                while (true)
                ...{
                    uint dummy = 0;
                    byte[] inOptionValues = new byte[Marshal.SizeOf(dummy) * 3];
                    BitConverter.GetBytes((uint)1).CopyTo(inOptionValues, 0);
                    BitConverter.GetBytes((uint)5000).CopyTo(inOptionValues, Marshal.SizeOf(dummy));
                    BitConverter.GetBytes((uint)5000).CopyTo(inOptionValues, Marshal.SizeOf(dummy) * 2);
                    try
                    ...{
                        Accept(inOptionValues);
                    }
                    catch ...{ }
                }
            }

            private static void Accept(byte[] inOptionValues)
            ...{
                Socket socket = Public.s_socketHandler.Accept();
                socket.IOControl(IOControlCode.KeepAliveValues, inOptionValues, null);
                UserInfo info = new UserInfo();
                info.socket = socket;
                int id = GetUserId();
                info.Index = id;
                Public.s_userList.Add(id, info);
                socket.BeginReceive(info.Buffer, 0, info.Buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallBack), info);
            }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hake303
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 11:54:2714楼 得分:0
    最好的方法是,两端互相发送心跳包,以判断心跳包的值来判断是否已断开
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xyken
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 11:58:4315楼 得分:0
    如果有三块网卡,一块在线,要判断另两块的掉线状态该怎样做啊?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Dobzhansky
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 11:59:4216楼 得分:3
    掉线的时候 windows 会发个通知

    你程序启动的时候订阅一下
    System.Net.NetworkInformation.NetworkChange 发布了两个事件:

    NetworkAddressChanged  Occurs when the IP address of a network interface changes. 
    NetworkAvailabilityChanged  Occurs when the availability of the network changes
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xyken
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 13:02:0417楼 得分:0
    11楼的方法:NetworkInterface.GetIsNetworkAvailable ()
    如果网络连接可用,则为 true;否则为 false。 我试过,可行!但请问是否可以判断指定网卡的掉线状态?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jzywh
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 13:05:4118楼 得分:3
    C# code
    [DllImport("wininet.dll")] private extern static bool InternetGetConnectedState(out int connectionDescription, int reservedValue); public bool IsInternetConnected() { int i = 0; return InternetGetConnectedState(out i, 0); }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • starrysky926
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 13:48:3819楼 得分:3
    private void GetNetworkInterface()
    {
        if (NetworkInterface.GetIsNetworkAvailable ())
        {
              MessageBox.Show("网络连接可用!");
        }
        else
        {
              MessageBox.Show("网络连接已断开!");
        }
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • starrysky926
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 13:51:4020楼 得分:0
    private void GetNetworkInterface()
    {
        if (NetworkInterface.GetIsNetworkAvailable ())
        {
              MessageBox.Show("网络连接可用!");
        }
        else
        {
              MessageBox.Show("网络连接已断开!");
        }
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • starrysky926
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 13:55:2221楼 得分:0

    private void GetNetworkInterface()
    {
        if (NetworkInterface.GetIsNetworkAvailable ())
        {
              MessageBox.Show("网络连接可用!");
        }
        else
        {
              MessageBox.Show("网络连接已断开!");
        }
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • GabrielCNMao
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 13:57:5622楼 得分:0
    引用 20 楼 starrysky926 的回复:
    private void GetNetworkInterface()
    {
        if (NetworkInterface.GetIsNetworkAvailable ())
        {
              MessageBox.Show("网络连接可用!");
        }
        else
        {
              MessageBox.Show("网络连接已断开!");
        }
    }

    Good
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • starrysky926
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 13:59:3823楼 得分:0
    C# code
    private void GetNetworkInterface() { if (NetworkInterface.GetIsNetworkAvailable ()) { MessageBox.Show("网络连接可用!"); } else { MessageBox.Show("网络连接已断开!"); } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xyken
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 14:03:1824楼 得分:0
    楼上NetworkInterface.GetIsNetworkAvailable 的方法是判断所有的网卡连接,但我要得知两个网卡或多个网卡时某一单个网卡是否掉线就无法判断了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • web_show
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-30 14:11:1725楼 得分:0
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • athena_lee
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-31 10:09:0526楼 得分:1
    引用 6 楼 wuqiubin 的回复:
    用这段代码就可以判断
    uint dummy = 0;
    byte[] inOptionValues = new byte[Marshal.SizeOf(dummy) * 3];
    BitConverter.GetBytes((uint)1).CopyTo(inOptionValues, 0);
    BitConverter.GetBytes((uint)1500).CopyTo(inOptionValues, Marshal.SizeOf(dummy));
    BitConverter.GetBytes((uint)8000).CopyTo(inOptionValues, Marshal.SizeOf(dummy) * 2);
    newRemoteSocket.IOControl(IOControlCode.KeepAliveValues, inOptionValue…


    try catch 这个捕获socketexception就可以了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • soaringbird
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-31 10:19:3227楼 得分:0
    用winpcap吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • soaringbird
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-31 10:20:0628楼 得分:1
    int  getNICStatus() 
      { 
      PPACKET_OID_DATA    oidData;                  //  Defined  in  Ntddpack.h 
      unsigned  int            buffLen;    //  OID  memory  allocation 
      unsigned  long    nRet; 
     
      buffLen  =  sizeof(PACKET_OID_DATA)  +  sizeof(unsigned  long)  -  1; 
      oidData  =  (PPACKET_OID_DATA)  GlobalAllocPtr(GMEM_MOVEABLE  |  GMEM_ZEROINIT,  buffLen); 
      if  (oidData  ==  NULL) 
      return  FALSE; 
     
      oidData->Oid  =  OID_GEN_MEDIA_CONNECT_STATUS; 
      oidData->Length  =  sizeof(unsigned  long); 
     
      if  ((PacketRequest(lpAdapter,0,  oidData))  >  0) 
      { 
      nRet    =  *(unsigned  long  *)oidData->Data; 
      GlobalFreePtr(oidData); 
      return  nRet; 
      } 
      else 
      { 
      GlobalFreePtr(oidData); 
      return  FALSE; 
      } 
      } 
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xyken
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-31 13:39:2229楼 得分:0
    楼上两位的怎么看不懂啊,C++俺不会啊
    修改 删除 举报 引用 回复
    进入用户个人空间