UDP方式接收数据时,怎样获取对方IP地址

sdkong 2005-07-22 10:41:42
在onReceive事件中,我用ReceiveFrom()和GetPeerName()都不对获取正确的ip,获取的值为1,端口号正确
SOCKADDR_IN sClientAddr;
int intLen = sizeof(sockaddr);
int intRead = ReceiveFrom(strData,8096,(SOCKADDR*) &sClientAddr,&intLen);
CString strIP;
UINT intPort;
strIP = *inet_ntoa(sClientAddr.sin_addr);
intPort = ntohs(sClientAddr.sin_port);
if (GetPeerName(strIP,intPort))
{
AfxMessageBox("ok");
}
...全文
850 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForTopLevel 2005-07-22
  • 打赏
  • 举报
回复
同意trains1982(天才).
pclili 2005-07-22
  • 打赏
  • 举报
回复
还没有麻烦到取IP头的地步,不管用TCP或UDP什么,都必须知道IP和端口才能传输.
UDP调用bind以后,也可以用send, recv来发送和接收消息了.
pclili 2005-07-22
  • 打赏
  • 举报
回复
CSocket s;
s.Create(8080, SOCK_DGRAM, "127.0.0.1");
这样就绑定了吧.

发送方和接收方都这样做.端口和IP改成你自己的了
trains1982 2005-07-22
  • 打赏
  • 举报
回复
用UDP 好像必须知道ip跟端口才能传输吧
antsoft 2005-07-22
  • 打赏
  • 举报
回复
你用的是CSocket不是可以用成员函数ReceiveFrom接收数据嘛
socket.ReceiveFrom(buffer,bufferlen,strIpFrom,nPortFrom,0),接收数据后strIpFrom就是数据来源的IP啊
sdkong 2005-07-22
  • 打赏
  • 举报
回复
我是用CSocket的,还能bind吗
huqian2003 2005-07-22
  • 打赏
  • 举报
回复
取ip头
pclili 2005-07-22
  • 打赏
  • 举报
回复
在发送方和接收方都用bind可以做到.
liuwei200000 2005-07-22
  • 打赏
  • 举报
回复
void CDASocket::OnReceive(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base
char buff[256];
memset(buff,0,256);
int ret=0;
CString ip;
UNIT Port;
//获得连接方(UDP)的数据及IP、Port;
ret = ReceiveFrom(buff,256,ip,port,0);
//ret=Receive(buff,256);
if(ret==ERROR)
{
TRACE("ERROR!");
}
else
{
MessageBox(ip);
}
}

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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