您可以在这里快速查找:


 
您的位置: 编程学习 > asp.net教程 > 200509
文章分类

Java技术
2005: 03 04 05 06 07 08
09 10 11 12
2006: 01 02

Asp.net
2005: 07 08 09 10 11 12
2006: 01 02

VB编程
2006: 02

Asp编程
2005: 11 12
2006: 01 02

C++/VC
2005: 10 11 12
2006: 01 02

Delphi
2005: 12
2006: 01 02

其它

 本文章适合所有读者

得到本机socket选项的全部默认值。

SkyGG

 最近写一些在网络上捕获数据包的程序,用到了RawSocket,其中要用到SetSocketOption()
原型为:SetSocketOption(SocketOptionLevel.IP,SocketOptionName.HeaderIncluded, 1);
第三个参数为什么要是 1 呢?原因是默认的值是 0 ,1表示打开这个选项。
那么还有多少这样的选项呢?答案是:很多,有200项左右。
于是有了下面的代码,它可以看一看你使用socket时每个option的默认值。知道了这些,你就
可以有的放矢的SetSocketOption()了。

Code:

---------------------------------------------------------------------------

namespace SKY.SocketOptions
{
 using System;
 using System.Net.Sockets;
 public class SocketOptions
 {
  public static void Main(string[] args)
  {
   int count = 0;
   //使用那种构造函数并不重要,何值也不重要,无非是CLR分配一些相关的结构
   //结构是重要的
   Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
          
   Type sol = typeof(SocketOptionLevel);
   Type son = typeof(SocketOptionName);
   Console.WriteLine("\tnum\tLevel\tName\t\tDefaultOption");
   Console.WriteLine("----------------------------------------------------------------");
   
   foreach(string s1 in Enum.GetNames(sol))
   {
    foreach( string s2 in Enum.GetNames(son))
    {
     count++;
    try
    {
     SocketOptionLevel o1 = (SocketOptionLevel)Enum.Parse(sol,s1);
     SocketOptionName o2 = (SocketOptionName)Enum.Parse(son,s2);
     Console.Write("\t{0}\t{1:-10}\t{2:-30}",count,s1,s2);
     //Get Values
     Console.Write("\t\t{0}\n",socket.GetSocketOption(o1,o2));
    }
    catch(ArgumentNullException)
    {
     Console.Write("\tNULL\n");
    }
    catch(ArgumentException)
    {
     Console.Write("\tNULL\n");
    }
    catch(SocketException)
    {
     Console.Write("\tNULL\n");
    }
   }

   }
   Console.WriteLine("----------------------------------------------------------------");
   /*
   Console.WriteLine("-------------SocketOptionLevel---------------------------");
   foreach ( string s1 in Enum.GetNames(sol))
   {
   Console.WriteLine( "{0}",s1);
   }
   Console.WriteLine("-------------SocketOptionName----------------------------");
   foreach( string s2 in Enum.GetNames(son))
   {
   Console.WriteLine( "|{0}",s2);
   }
   Console.WriteLine("------------------END------------------------------------");
   */
   Console.ReadLine();
  }
 }
}

---------------------------------------------------
下面是屏幕截图: