下面是基于UDP的CAsyncSocket,8080端口是没有任何服务开的,IP是我自己机器上的,为什么一个端口向自己机器上一个没开的端口发数据会触发自己的OnReceive呢?我搞不懂.ms.SendTo(buf,10,8080,"192.168.0.136");
void Csock::OnReceive(int nErrorCode) 
{
CString ipstr;
UINT nport;
int len;
LPCTSTR lpctstr=new char[1024];
len=ReceiveFrom((void*)lpctstr,1024,ipstr,nport,0);
AfxMessageBox(lpctstr);
CAsyncSocket::OnReceive(nErrorCode);
}

解决方案 »

  1.   

    不可能吧。用netstat看看8080是不是在listen,8080好象一般是代理端口
      

  2.   

    这可能是操作系统的tcp/ip的实现造成的
    操作系统收到一个数据包候,总是调用最接近的程序来处理。
    记得ping程序中,我们不也是用一个socket既发送又接受的吗。
      

  3.   

    你的这个是组播程序,好象他要向网络中的所有机器发送数据包,包括自己,你查一查《windows网络编程》,里面有
      

  4.   

    ping的原理跟这个完全不一样了,因为PING没有端口号和IP地址,所以你只要接收,系统会把所有内核不处理的都发给你的。UDP不一样的。你能确保8080没开任何端口吗?用netstat -a再查查吧。