一个简单的问题--Socket.ReceiveFrom函数的用法

caiwei1129 2003-10-17 02:55:31
using System;
using System.Net;
using System.Net.Sockets;

namespace server
{
class Class1
{
static void Main(string[] args)
{
Socket myso=new Socket(AddressFamily.InterNetwork,SocketType.Raw,ProtocolType.Icmp);
byte[] rcvBuf=new byte[256];
IPEndPoint remoteIP=new IPEndPoint(IPAddress.Parse("172.16.11.22"),0);
EndPoint remoteEP=(remoteIP);
while(true)
{
int nBytes=myso.ReceiveFrom(rcvBuf,256,0,ref remoteEP);
Console.WriteLine(remoteEP.ToString());
}
}
}
}

我想写一个接收ICMP数据包的程序,可是上述程序总是说执行ReceiveFrom函数那句出错:"An unhandled exception of type 'System.Net.Sockets.SocketException' occurred in system.dll

Additional information: 提供了一个无效的参数。"
请教一下各位大侠应该怎么改,这个程序是想接受所有的ICMP包的,ReceiveFrom函数中的最后一个EndPoint参数我记得好象是用来存储远程主机的信息的,所以原来为空应该也可以,可是若这个参数开始没有赋值,就提示使用了未赋值的参数,给他赋值,又提示上述错误,哪位大侠帮帮我吧!!
...全文
805 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
babysgaler 2003-11-11
  • 打赏
  • 举报
回复
收分
caiwei1129 2003-10-18
  • 打赏
  • 举报
回复
wolve你好,我试过用IPAddress.Any了,可是结果一样不行
至于rgbcn推荐的ping程序,实际上我已经编过了,且运行成功,而且奇怪是,为什么那里receivefrom函数的最后一个EndPoint参数用的是本机的地址,我觉得应该是远程的啊,即使我按照ping程序中的receiveFrom函数原原本本的搬过来,还是同样错误,真是不明白是怎么回事
caiwei1129 2003-10-18
  • 打赏
  • 举报
回复
我发现一个奇怪的现象,如果用建立的原始套接字先向某个随便什么地址用sendto函数发送一个数据包,再用receivefrom函数就没有问题了,如果把sendto函数这一行去掉,则提示receivefrom这行提供了一个无效的参数....这是什么原因呢??
caiwei1129 2003-10-18
  • 打赏
  • 举报
回复
up
dahai9825 2003-10-17
  • 打赏
  • 举报
回复
up
rgbcn 2003-10-17
  • 打赏
  • 举报
回复
看下这
http://www.c-sharpcorner.com/network/ping.asp
hmjwdmh 2003-10-17
  • 打赏
  • 举报
回复
up
wolve 2003-10-17
  • 打赏
  • 举报
回复
我发错了,sorry.
把remoteIp设为:IPEndPoint(IPAddress.Any, 0)试试.应该参考一下socket的通信协议的文档,可能还有设置其它标志位。

wolve 2003-10-17
  • 打赏
  • 举报
回复
http://www-900.ibm.com/developerWorks/cn/webservices/ws-secure/index.shtml

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧