免费注册 查看新帖 |

Chinaunix

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

socket 编程,急!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-02-05 15:15 |只看该作者 |倒序浏览
各位大虾:
      小弟遇到一奇怪的问题,请指点迷津。代码如下:

     struct sockaddr_in servaddr;

     TheSock = socket(AF_INET,SOCK_STREAM,0);
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(FPort);
    servaddr.sin_addr.s_addr = inet_addr(FIP.c_str());

    int nRet;
    if( (nRet = connect(TheSock,(struct sockaddr*)&servaddr,sizeof(servaddr))) < 0)
   
    该代码应该没有任何问题,但编译时系统报错如下:
    conversion from `sockaddr *' to non-scalar type `__CONST_SOCKADDR_ARG' requested。
  
    我的编译环境是RedHat7.3 , 请各位帮帮忙!

论坛徽章:
0
2 [报告]
发表于 2004-02-05 15:38 |只看该作者

socket 编程,急!!!

FIP.c_str()你返回的是什么类型的撒?先打印出来看看!
看错误提示就知道是类型不匹配!

论坛徽章:
0
3 [报告]
发表于 2004-02-06 10:07 |只看该作者

socket 编程,急!!!

原帖由 "henngy" 发表:
FIP.c_str()你返回的是什么类型的撒?先打印出来看看!
看错误提示就知道是类型不匹配!


这个问题和FIP.c_str()有什么关系,这是一个c++的基本问题,如果这段程序是用c写的(当然是假设没有用stl了。。。) 这么调用:
connect(TheSock,(struct sockaddr*)&servaddr,sizeof(servaddr))是没有什么问题的, 看看connect 的man page,这个函数是这样的:
int  connect(int  sockfd,  const  struct sockaddr *serv_addr, socklen_t addrlen);

在c++中 const struct sockaddr*是不允许被强迫转换为struct sockaddr*的。

其实不管是c还是c++,最好的写法应该是:
socklen_t addrlen = sizeof(*servaddr);
connect(TheSock,(const struct sockaddr*)&servaddr,addrlen)

论坛徽章:
1
戌狗
日期:2014-07-17 19:24:40
4 [报告]
发表于 2013-06-25 13:33 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP