永发信息网

linux运行一个TCP服务器端程序,总是提示”段错误“,麻烦帮我看看到底哪里出了问题?

答案:2  悬赏:30  手机版
解决时间 2021-03-20 09:02
  • 提问者网友:箛茗
  • 2021-03-19 16:32
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAXSIZE 1024
int main(int argc, char *argv[])
{
int sockfd,new_fd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int sin_size,portnumber;
char buf[MAXSIZE];
if(argc!=2)
{
fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);
exit(1);
}
if((portnumber=atoi(argv[1]))<0)
{
fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);
exit(1);
}
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)

{
fprintf(stderr,"Socket error:%s\n\a",strerror(errno));
exit(1);
}

bzero(&server_addr,sizeof(struct sockaddr_in));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
server_addr.sin_port=htons(portnumber);
if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)

{
fprintf(stderr,"Bind error:%s\n\a",strerror(errno));
exit(1);
}
if(listen(sockfd,5)==-1)

{
fprintf(stderr,"Listen error:%s\n\a",strerror(errno));
exit(1);
}
while(1)
{
sin_size=sizeof(struct sockaddr_in);
if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1)

{
fprintf(stderr,"Accept error:%s\n\a",strerror(errno));
exit(1);
}
fprintf(stderr,"Server get connection from %s\n",inet_ntoa(client_addr.sin_addr));

printf("Connected successful, please input the masage[<1024 bytes]:\n");

if(fgets(buf, sizeof(buf), stdin) != buf)
{
printf("fgets error!\n");
exit(1);
}
if(write(new_fd,buf,strlen(buf))==-1)
{
fprintf(stderr,"Write Error:%s\n",strerror(errno));
exit(1);
}
close(new_fd);
}
close(sockfd);
exit(0);
}
最佳答案
  • 五星知识达人网友:渡鹤影
  • 2021-03-19 17:04
感觉问题出在
char buf[MAXSIZE]; 怀疑可能由于编译器或其他原因,系统并没有为buf分配内存空间。
导致在fgets的时候出现段错误
可以通过malloc分配空间,或者使用 static char buf[MAXSIZE]; 的方式试一下,看看是不是这个问题。
全部回答
  • 1楼网友:千夜
  • 2021-03-19 18:23
在前面加上 #include
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯