我试了各种方法,不过至今都不行~下面那个是试验到现在的最可行的点的方法了,关键代码如下:
sock = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
sock.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1);sock.SendTo(bytee, bytee.Length, 0, ip);但是它一执行,它就一直报错:一个封锁操作被对 WSACancelBlockingCall 的调用中断。
请问这是为什么呢?如何才能把原始套接字发出去呢?谢谢了~项目催得很紧,麻烦帮忙吧~~~~

解决方案 »

  1.   

    不对,发错了那个发送的代码应该是:sock.Send(bytee, bytee.Length, 0); 
      

  2.   

    下面的代码示例演示在连接的 Socket 上发送数据。// Displays sending with a connected socket
    // using the overload that takes a buffer.
    public static int SendReceiveTest1(Socket server)
    {
        byte[] msg = Encoding.UTF8.GetBytes("This is a test");
        byte[] bytes = new byte[256];
        try 
        {
            // Blocks until send returns.
            int i = server.Send(msg);
            Console.WriteLine("Sent {0} bytes.", i);
            
            // Get reply from the server.
            i = server.Receive(bytes);
            Console.WriteLine(Encoding.UTF8.GetString(bytes));
        }
        catch (SocketException e)
        {
            Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
            return (e.ErrorCode);
        }
        return 0;
    }
      

  3.   


    嗯,Connect了。另外,刚查到说是XP SP2都会发生这个错误的天呐~~~不会让我重装系统吧??~~~
      

  4.   

    同感,系统的问题,再就是还建议你抓网络数据包看看,你下载一个 ethereal
    运行程序前,启动ethereal,我做你类似的项目还要自己写模拟器收发自己程序的套接字消息呢
    ethereal可以看到,并让你检查分析数据包的正确性QQ:47332677欢迎交流
      

  5.   

    后来还是用WinPcap解决的,用了它的两个dll,不过,在Vista下貌似没法运行,在XP下没任何问题。WinPcap确实非常强大~~~~
      

  6.   

    MSDN里没有原始套接字的例程?