LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 605|回复: 4

how to get socket name ?

[复制链接]
发表于 2004-5-12 22:15:37 | 显示全部楼层 |阅读模式
这是不成功的程序,只要在最后那里做修改就可以了,不懂得怎么做,请帮忙,先谢过。。:rolleyes:
  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <netinet/in.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. int
  7. main(void)
  8. {
  9.         int                  sockfd;
  10.         struct sockaddr_in   AAaddr;
  11.         socklen_t               len;
  12.         if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0) {
  13.                perror("create a stream socket error");
  14.                exit(1);
  15.         }
  16.         bzero(&AAaddr,sizeof(AAaddr));
  17.         AAaddr.sin_family=AF_INET;
  18.         AAaddr.sin_port=htons(13);
  19.         AAaddr.sin_addr.s_addr=htonl(9876);
  20.         len=sizeof(AAaddr);
  21.         if(getsockname(sockfd,(struct sockaddr *)&AAaddr,&len) != 0) {
  22.                perror(" get sock name error");
  23.                exit(1);
  24.         }
  25.         printf("sock name is %s\n",AAaddr.sa_data);
  26.         exit(0);
  27. }
复制代码
就是 printf() 那里不行。。
发表于 2004-5-12 22:55:42 | 显示全部楼层
sa_data是什么?
 楼主| 发表于 2004-5-12 23:04:52 | 显示全部楼层
最初由 libinary 发表
sa_data是什么?

struct sockaddr  {
char sa_data[14] ; /* protocol -specific address */.
}
发表于 2004-5-13 00:11:35 | 显示全部楼层
你用的struct sockaddr_in嘛,应该用sin_addr和sin_port
printf("sock name is %s:%d\n", inet_ntoa(AAaddr.sin_addr), ntohs(AAaddr.sin_port));

另外,你的AAaddr.sin_addr.s_addr=htonl(9876);这个什么意思呀?
地址是9876?应该用inet_addr("xxx.xxx.xxx.xxx")之类的吧
再加上bind和listen
发表于 2004-5-13 11:55:08 | 显示全部楼层
估计是把htonl写成端口了哦!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表