首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

segment fault异常

2012-03-04 
segment fault错误写了一个程序,在不绑定sock中的ip的情况下,想得到recvfrom函数用来接收数据的本地IP地址

segment fault错误
写了一个程序,在不绑定sock中的ip的情况下,想得到recvfrom函数用来接收数据的本地IP地址(本机有多个IP地址),有两个问题请教:
(1)运行时出现segment   fault错误,是哪地方出错了呢?
(2)用getsockname这种方法能得到多ip时,本地接收信息的ip地址吗?
-----------------
server.c,这是服务器端。另有一个client定时向server的指定端口5678发送数据。
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
int   main()
{
                int   sock,   pport;;
                char   buff[100];
                socklen_t     i;
                char   *p;
                p=(char   *)malloc(100*sizeof(char));
                struct   sockaddr_in   address,ad,source;
                address.sin_family=AF_INET;
                address.sin_port=htons(5678);
                sock=socket(AF_INET,SOCK_DGRAM,0);
                bind(sock,(struct   sockaddr   *)&address,sizeof(address));
                source.sin_family=AF_INET;
                ad.sin_family=AF_INET;
                i   =   sizeof(struct   sockaddr_in);
                recvfrom(sock,buff,500,0,(struct   sockaddr   *)&source,&i);
                printf( "Data   recieved   is:%s\n ",buff);
                i   =   sizeof(struct   sockaddr_in);
                if(getsockname(sock,(struct   sockaddr   *)&ad,&i))
                {
                                puts( "Error! ");
                }
                printf( "i   is:%d\n ",i);
                p=inet_ntoa(ad.sin_addr.s_addr);
                printf( "Ip   is:%s\n ",p);
                fclose(sock);
}


[解决办法]
p=(char *)malloc(100*sizeof(char));
struct sockaddr_in address,ad,source;

这两行调换一下顺序。。。
[解决办法]
printf( "Data recieved is:%s\n ",buff);
--------------------------------
不能这么写!
[解决办法]
baidu這本書

Beej 's Guide to Network Programming

可以幫你
[解决办法]
getsockname达不到你的目的。用recvmsg可以
segment fault错误是因为fclose(sock),改为close(sock)

热点排行