LinuxSir.cn,穿越时空的Linuxsir!

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

服务器端段错误问题

[复制链接]
发表于 2006-4-13 10:45:37 | 显示全部楼层 |阅读模式
一个小的服务器端程序,编译通过,一运行就发生段错误,
在网上查了一下段错误的原因,还是没能搞明白,盼指教

  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <string.h>
  4. #include <sys/socket.h>
  5. #include <sys/time.h>
  6. #include <unistd.h>
  7. #include <netinet/in.h>
  8. #include <arpa/inet.h>
  9. #include <stdlib.h>
  10. #include <errno.h>
  11. #include <fcntl.h>
  12. #define MAX_LEN 1024


  13. int main(int argc ,char* argv[])
  14. {
  15.         int sockfd;
  16.    struct sockaddr_in servaddr;
  17.    struct sockaddr_in cliaddr;
  18.    const char *sendbuf = "hello world!";
  19.    char recvbuf[MAX_LEN];
  20.    int number_bytes;
  21.    int servlen,clilen;
  22.    int conn_ret;


  23. if((sockfd = socket(AF_INET,SOCK_DGRAM,0)) == -1){
  24.        perror("sock");
  25.        exit(1);
  26.    }
  27.    bzero(&servaddr,sizeof(servaddr));
  28.    servaddr.sin_family = AF_INET;
  29.    servaddr.sin_port = htons(atoi(argv[2]));
  30.    inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
  31.    conn_ret = connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
  32.    if(conn_ret == -1){
  33.        perror("connect");
  34.        exit(1);
  35.    }
  36.    if (send(sockfd,sendbuf,strlen(sendbuf),0)== -1){
  37.        perror("sendto");
  38.        exit(1);
  39.    }

  40. if ((number_bytes = recv(sockfd,recvbuf,MAX_LEN-1,0))==-1){
  41.          perror("recvbuf");
  42.          exit(1);
  43.    }else{
  44.         recvbuf[number_bytes] = '\0';
  45.         printf("client receives message:%s\n",recvbuf);
  46.    }
  47.    close(sockfd);
  48.    return 0;
  49. }
复制代码
发表于 2006-4-13 12:10:08 | 显示全部楼层
检查一下指针参数传得正不正确。。
回复 支持 反对

使用道具 举报

发表于 2006-4-13 12:46:40 | 显示全部楼层
Post by linus
一个小的服务器端程序,编译通过,一运行就发生段错误,
在网上查了一下段错误的原因,还是没能搞明白,盼指教

  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <string.h>
  4. #include <sys/socket.h>
  5. #include <sys/time.h>
  6. #include <unistd.h>
  7. #include <netinet/in.h>
  8. #include <arpa/inet.h>
  9. #include <stdlib.h>
  10. #include <errno.h>
  11. #include <fcntl.h>
  12. #define MAX_LEN 1024


  13. int main(int argc ,char* argv[])
  14. {
  15.         int sockfd;
  16.    struct sockaddr_in servaddr;
  17.    struct sockaddr_in cliaddr;
  18.    const char *sendbuf = "hello world!";
  19.    char recvbuf[MAX_LEN];
  20.    int number_bytes;
  21.    int servlen,clilen;
  22.    int conn_ret;


  23. if((sockfd = socket(AF_INET,SOCK_DGRAM,0)) == -1){
  24.        perror("sock");
  25.        exit(1);
  26.    }
  27.    bzero(&servaddr,sizeof(servaddr));
  28.    servaddr.sin_family = AF_INET;
  29.    servaddr.sin_port = htons(atoi(argv[2]));
  30.    inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
  31.    conn_ret = connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
  32.    if(conn_ret == -1){
  33.        perror("connect");
  34.        exit(1);
  35.    }
  36.    if (send(sockfd,sendbuf,strlen(sendbuf),0)== -1){
  37.        perror("sendto");
  38.        exit(1);
  39.    }

  40. if ((number_bytes = recv(sockfd,recvbuf,MAX_LEN-1,0))==-1){
  41.          perror("recvbuf");
  42.          exit(1);
  43.    }else{
  44.         recvbuf[number_bytes] = '\0';
  45.         printf("client receives message:%s\n",recvbuf);
  46.    }
  47.    close(sockfd);
  48.    return 0;
  49. }
复制代码

这个是客户端程序吧,不是说服务器端出问题了么?把服务器端的源代码贴出来
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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