我想用UDP建立点对点通信,可接收方如何知道发送方的IP呢?

解决方案 »

  1.   

    RecvFrom(s,...);s是一个SOCKET,其中有个参数就是可以接收的sockaddr_in 结构的对方的IP
      

  2.   

    int recvfrom (
      SOCKET s,                   
      char FAR* buf,              
      int len,                    
      int flags,                  
      struct sockaddr FAR* from, //from 
                                 //[out] An optional pointer to a buffer 
                                 //that will  hold the source address upon return. 
     
      int FAR* fromlen            
    );
      

  3.   

    不好意思,看错了。
    你可以用组播的形式,大家加入一个IP GROUP,互相之间就可以通信了,
    当然,要取得IP也就容易了。
      

  4.   

    你在使用RECVFROM 函数之前不是创建了一个套接子了吗,然后在使用GETPEERNAME函数就可以返回对端的IP及端口号了。
      

  5.   

    receivefrom函数中第三个参数 当有数据过来时 windows自动会把那个参数改为对方的IP地址
    int ReceiveFrom( void* lpBuf, int nBufLen, CString& rSocketAddress, UINT& rSocketPort, int nFlags = 0 );
      

  6.   

    receivefrom函数在调用时不是要填入对方的地址吗?
      

  7.   

    int recvfrom (
      SOCKET s,                   
      char FAR* buf,              
      int len,                    
      int flags,                  
      struct sockaddr FAR* from, //from 
                                 //[out] An optional pointer to a buffer 
                                 //that will  hold the source address upon return. 
     
      int FAR* fromlen            
    );
    在调用recvfrom这前,定义一地址结构struct sockaddr 要不要填入对方地址?
      

  8.   

    当然不用填,接收成功后系统会自动填入,给对方返回消息就用这个自动填好的sockaddr
      

  9.   

    CString strIp;
    UINT iPort;
    pSocket->GetPeerName(strIp, iPort);
      

  10.   

    recvfrom 的倒数第二个是一个输出参数,可以得到来源的ip地址还有一个办法,ip的包头中有来源的ip地址,不过这个地址不一定是真正的来源不过程序是自己编的,这个不用担心了