在本机上进行两个程序的通信,分别绑定端口5000和8000, 当其中一个程序(端口为5000)向另一个程序(端口为8000)发送数据时,如果另一个程序(8000)接收了数据,则通信正常;当另一程序(端口8000)没有运行,而端口为5000的程序却给它发送了数据,端口为5000的程序的套接字却会产生一个接收中断,即表示有数据收到,但接收数据却出错,这是为什么,求高人指点,谢谢!

解决方案 »

  1.   

    其实问题就相当于我写了一个程序,然后这个程序给本机随意一个端口发送数据,当这个数据没有谁接收时,这个程序自身就会产生一个接收中断,触发它的接收函数,然而用ReceiveFrom去接收数据时却返回SOCKET_ERROR错误
      

  2.   

    你sendto发送数据,哪里来的接收中断?不清楚你怎么写的?中断又是如何的产生的?
      

  3.   

    我也觉得莫名其妙,我用的是MFC的CSocket,创建套接字如下:
    //创建本地UDP套接字
    LocalSock.GetLocalIP(m_LocalIP);
    if(!LocalSock.Create(5000, SOCK_DGRAM, m_LocalIP))
    {
    MessageBeep(MB_ICONHAND);
    AfxMessageBox(_T("创建Socket失败!"));
    }
    在OnReceive函数中设置一个断点,F5运行,然后用SendTo(lpBuf, nBufLen, nHostPort, lpszHostAddress, nFlags)发送数据,程序会在断点处停止,说明收到数据,这个问题纠结我好久了
      

  4.   

    向对方没打开的端口上发数据,你的接收函数返回错误是正常的,因为端口没打开,对方会向你发送ICMP端口不可达。你可以判断一下接收的错误码,应该是WSAECONNRESET。这里有很多WinSock的源码,直接拿一个试验就行:
    http://download.csdn.net/detail/geoff08zhang/4571358