免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2643 | 回复: 3
打印 上一主题 下一主题

[C++] socket获取发送端IP的一点疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-03-25 16:36 |只看该作者 |倒序浏览
5可用积分
  1. /******************************************************************************
  2. *        void SocketRecv 接收Socket数据
  3. *        参数
  4. *        int Port 端口号双方必须保持一致
  5. *        LPTSTR &Parameter 具体参数
  6. ******************************************************************************/
  7. void SocketRecv(int Port, LPTSTR &Parameter, char &ClientAddress)
  8. {
  9.         WSADATA data;
  10.         WSAStartup(MAKEWORD(2, 2), &data);

  11.         SOCKET s, s1;
  12.         s = socket(AF_INET, SOCK_STREAM, 0);
  13.         sockaddr_in addr;
  14.         addr.sin_family = AF_INET;
  15.         addr.sin_port = htons(Port);
  16.         addr.sin_addr.S_un.S_addr = INADDR_ANY;

  17.         bind(s, (sockaddr*)&addr, sizeof(addr));

  18.         //监听并处理
  19.         listen(s, 5);
  20.         int n = sizeof(addr);
  21.         s1 = accept(s, (sockaddr*)&addr, &n);
  22.        
  23.         //转换IP地址
  24.         char ip = htonl(addr.sin_addr.S_un.S_un_b);
  25.         //得到数据
  26.         char i[1024] = {0};
  27.         recv(s1, i, sizeof(i), 0);
  28.         Parameter = i;
  29.         //销毁
  30.         closesocket(s1);
  31.         closesocket(s);
  32.         WSACleanup();
  33. }
复制代码
获取IP地址错误
        1        IntelliSense: 不存在从 "struct in_addr::<unnamed>::<unnamed>" 到 "u_long" 的适当转换函数        f:\C++代码\个性化磁盘\SocketServer\SocketServer\SocketServer.cpp        113

怎么获取发送端IP才正确?

最佳答案

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
2 [报告]
发表于 2014-03-25 16:36 |只看该作者
本帖最后由 yulihua49 于 2014-03-31 16:18 编辑
  1. static char IFMT[]="%u.%u.%u.%u";
  2. int peeraddr(int sock,char net_addr[16])
  3. {
  4. int cc;
  5. struct p_name {
  6.         unsigned short family;
  7.         unsigned short port;
  8.         unsigned char addr[14];
  9. }pname;
  10. socklen_t lname;
  11.        lname=14;
  12.         if((cc=getpeername(sock,(struct sockaddr *)&pname,&lname))==0){
  13.                 sprintf(net_addr,IFMT,
  14.                         (unsigned char)pname.addr[0],
  15.                         (unsigned char)pname.addr[1],
  16.                         (unsigned char)pname.addr[2],
  17.                         (unsigned char)pname.addr[3]);
  18.                 lname=*(int *)pname.addr;
  19.                 return lname;
  20.         }
  21.         else {
  22.                 sprintf(net_addr,"000000");
  23.                 return 0;
  24.         }
  25. }
复制代码
tan1301230147 发表于 2014-03-28 12:30
别沉啊 我就是想问下如何才能获取到发送端的ip地址

getpeername()

论坛徽章:
0
3 [报告]
发表于 2014-03-28 12:30 |只看该作者
别沉啊 我就是想问下如何才能获取到发送端的ip地址
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP