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

segmentation fault,求高手!解决方法

2012-03-08 
segmentation fault,求高手!这是服务器端的程序:C/C++ code#include stdio.h#includestdlib.h#include

segmentation fault,求高手!
这是服务器端的程序:

C/C++ code
#include <stdio.h>#include<stdlib.h>#include<strings.h>#include<sys/types.h>#include<sys/socket.h>#include<unistd.h>//#include<Linux/in.h>#include<netinet/in.h>#define PORT 8888#define BACKLOG 2void process_conn_server(int s);int main(int argc, char *argv[]){    int ss,sc;    struct  sockaddr_in server_addr;    struct  sockaddr_in client_addr;    int err;    pid_t pid;    ss=socket(AF_INET,SOCK_STREAM,0);    if(ss<0)    {        printf("socket error\n");        return -1;    }    bzero(&server_addr,sizeof(server_addr));//清零    server_addr.sin_family=AF_INET;    server_addr.sin_addr.s_addr=htonl(INADDR_ANY);    server_addr.sin_port=htons(PORT);    err=bind(ss,(struct sockaddr*)&server_addr,sizeof(server_addr));    if(err<0)        {          printf("bind error\n");          return -1;        }    err=listen(ss,BACKLOG);    if(err<0)        {        printf("listen error\n");        return -1;        }    for(; ;)        {          int addrlen=sizeof(struct sockaddr);          sc=accept(ss,(struct sockaddr *)&client_addr,&addrlen);          if(sc<0)              {              continue;              }          pid=fork();          if(pid==0)              {              close(ss);            process_conn_server(sc);              }          else              {              close(ss);              }                  }}void process_conn_server(int s){   ssize_t size=0;   char buffer[1024];   for(; ;)       {       size=read(s,buffer,1024);    if(size==0)        {        return;        }    sprintf(buffer,"%d bytes altogether \n",size);    write(s,buffer,strlen(buffer)+1);       }}

这是客户端程序,出现问题的就是这里,在linux里面,server端能运行起来,但是客户端的就是出现这个错误,求帮助!
C/C++ code
#include <stdio.h>#include<stdlib.h>#include<strings.h>#include<sys/types.h>#include<sys/socket.h>#include<unistd.h>#include<netinet/in.h>#include<assert.h>//#include<linux/in.h>#define PORT 8888void process_conn_server(int s);int main(int argc, char *argv[]){  int s;  struct sockaddr_in server_addr;  int err;  int tmp=0;  s=socket(AF_INET,SOCK_STREAM,0);  if(s<0)      {      printf("socket error\n");    return -1;      }  bzero(&server_addr,sizeof(server_addr));  server_addr.sin_family=AF_INET;  server_addr.sin_addr.s_addr=htonl(INADDR_ANY);  tmp=server_addr.sin_port=htons(PORT);            assert(tmp>0);    {        printf("yes yes");    }    tmp=0;   tmp=inet_pton(AF_INET,argv[1],&(server_addr.sin_addr));   assert(tmp>0);    {        printf("yes");    }  connect(s,(struct sockaddr *)&server_addr,sizeof(struct sockaddr));  process_conn_server(s);  close(s);      }void process_conn_server(int s){ ssize_t size=0; char buffer[1024]; for(; ;)     {     size=read(0,buffer,1024);    if(size>0)        {        write(s,buffer,size);        size=read(s,buffer,1024);        write(1,buffer,size);        }     }}谢谢了。。。。


[解决办法]
没有段错误啊,tmp=inet_pton(AF_INET,argv[1],&(server_addr.sin_addr));
这一句是需要你输入ip的,是不是没加上?
./main 127.0.0.1
sds
4 bytes altogether 
sdsd
5 bytes altogether 
asdasdada
10 bytes altogether

[解决办法]
tmp=inet_pton(AF_INET,argv[1] ,&(server_addr.sin_addr));
这个argv[1]应该是你从命令行输入的ip

热点排行