下面那个是试验到现在的最可行的点的方法了,关键代码如下:
sock = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
sock.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1);
sock.SendTo(bytee, bytee.Length, 0, ip);
但是它一执行,它就一直报错:一个*操作被对 WSACancelBlockingCall 的调用中断。
请问这是为什么呢?如何才能把原始套接字发出去呢?谢谢了~
项目催得很紧,麻烦帮忙吧~~~~
10 个解决方案
#1
不对,发错了
那个发送的代码应该是:sock.Send(bytee, bytee.Length, 0);
那个发送的代码应该是: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 了吗
#4
谢谢,不过这个发送的只是包的数据部分吧,它的包头没法自定义,不是原始套接字啊~
#5
嗯,Connect了。
另外,刚查到说是XP SP2都会发生这个错误的。。。天呐~~~不会让我重装系统吧??~~~
#6
你换个操作系统试试,我认为可能还是同样的问题
#7
嗯,正在装虚拟机中。。。~
#8
同感,系统的问题,再就是还建议你抓网络数据包看看,你下载一个 ethereal
运行程序前,启动ethereal,我做你类似的项目还要自己写模拟器收发自己程序的套接字消息呢
ethereal可以看到,并让你检查分析数据包的正确性
QQ:47332677欢迎交流
运行程序前,启动ethereal,我做你类似的项目还要自己写模拟器收发自己程序的套接字消息呢
ethereal可以看到,并让你检查分析数据包的正确性
QQ:47332677欢迎交流
#9
后来还是用WinPcap解决的,用了它的两个dll,不过,在Vista下貌似没法运行,在XP下没任何问题。
WinPcap确实非常强大~~~~
WinPcap确实非常强大~~~~
#10
MSDN里没有原始套接字的例程?
#1
不对,发错了
那个发送的代码应该是:sock.Send(bytee, bytee.Length, 0);
那个发送的代码应该是: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 了吗
#4
谢谢,不过这个发送的只是包的数据部分吧,它的包头没法自定义,不是原始套接字啊~
#5
嗯,Connect了。
另外,刚查到说是XP SP2都会发生这个错误的。。。天呐~~~不会让我重装系统吧??~~~
#6
你换个操作系统试试,我认为可能还是同样的问题
#7
嗯,正在装虚拟机中。。。~
#8
同感,系统的问题,再就是还建议你抓网络数据包看看,你下载一个 ethereal
运行程序前,启动ethereal,我做你类似的项目还要自己写模拟器收发自己程序的套接字消息呢
ethereal可以看到,并让你检查分析数据包的正确性
QQ:47332677欢迎交流
运行程序前,启动ethereal,我做你类似的项目还要自己写模拟器收发自己程序的套接字消息呢
ethereal可以看到,并让你检查分析数据包的正确性
QQ:47332677欢迎交流
#9
后来还是用WinPcap解决的,用了它的两个dll,不过,在Vista下貌似没法运行,在XP下没任何问题。
WinPcap确实非常强大~~~~
WinPcap确实非常强大~~~~
#10
MSDN里没有原始套接字的例程?