socket请教

hs_guanqi 2004-03-25 12:20:45
我想建立一个服务器端的socket,只有指定ip的客户端才能连接,
但是我bind的时候,运行提示Cannot assign requested address.
问题代码如下:
int sock;
struct sockaddr_in name;

sock = socket(PF_INET, SOCK_STREAM , 0);
if(sock < 0) {
...
}

name.sin_family = AF_INET;
name.sin_port = htons(5555);

/* dest_ip is 0x202a8c0, 即192.168.2.2的转换成网络字节顺序后的值
* 偶也把dest_ip换成0xc0a80202试过了,一样的结果
* */
name.sin_addr.s_addr = dest_ip;
if(bind(sock, (struct sockaddr*)&name, sizeof(name) < 0) {
perror("bind");
exit(1);
}
请问这样的问题如何解决?
...全文
52 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hs_guanqi 2004-03-26
  • 打赏
  • 举报
回复
nnd,怎么不能结贴,参数错误?
hs_guanqi 2004-03-26
  • 打赏
  • 举报
回复
呵呵,原来如此,偶把bind的理解错了,多谢各位
Jack1Black 2004-03-25
  • 打赏
  • 举报
回复
你写得是sever,那么你写的客户端connnect()的时候的sockaddr_in结构的ip地址指定是server得ip就行了,这样不就做到了;
如果客户端不是你指定的,那么你可以在server的accept()函数作个判断,如果不是你指定的IP,那么就关闭这个套结字
confd=accept(sockfd,(struct sockaddr*)&source_addr,sizeof(source_addr));
if(source_addr.sin_addr...!=IP)
close(confd);

server绑定的时候name.sin_addr.s_addr = dest_ip;这里的IP地址是指server的地址
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);//这里指由内核指定server的IP

rexp 2004-03-25
  • 打赏
  • 举报
回复
dest_ip是什么?是你指定的可以连接的客户端IP?如果是这样的话,你的程序肯定是错误的。bind的时候是要本机的地址,就算不是0的话。还有,最好用htonl来转换一下,那样安全。
anonimousboy 2004-03-25
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2879/2879992.xml?temp=.8057672
那里边有我写的一点code,在redhat9.0下好用,你可以看看!
yiyi999999999 2004-03-25
  • 打赏
  • 举报
回复
你写的是服务程序,有些地方写的不对啊,你试试下面的程序:
socketfd = socket(AF_INET,SOCK_STREAM,0);
if(socketfd<0)
{
printf("error in create socket!\n");
exit(-1);
}

my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(5555);
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);

bzero(&(my_addr.sin_zero),8);
ret = bind(socketfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr));
if(ret<0)
{
printf("error in binding!\n");
exit(-2);
}

23,124

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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