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