当前位置:  技术问答>linux和unix

一个很简单的通过socket发送接受文件的程序,出现了segmentation fault错误。请各位帮忙

    来源: 互联网  发布时间:2015-10-14

    本文导语:  第一次写程序,大体过程如下: 客户端程序,建立socket——〉配置服务器端口和地址等-〉connect -> send 一个*.xml文件             之后接受服务器端发送的另一个xml文件,保存,结束。 #include  #include  #include...

第一次写程序,大体过程如下:
客户端程序,建立socket——〉配置服务器端口和地址等-〉connect -> send 一个*.xml文件
            之后接受服务器端发送的另一个xml文件,保存,结束。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define SERVPORT 8080


main (int argc,char *argv[]) {
int sockfd;
long recvbytes,filesize;
char filename[] = "request.xml";
char *buf_file;
FILE *req, *res;
        struct sockaddr_in serv_addr;

long GetFileSize(char fn[]);

/* configure socket, such as server ip address and port */
  if ((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1) {
   perror(" socket failed. ");
exit(1);
  }

  serv_addr.sin_family = AF_INET;
  serv_addr.sin_port = htons(SERVPORT);
         if ((serv_addr.sin_addr.s_addr = inet_addr("172.25.21.41")) == -1) {
  perror("Server IP address failed.");
exit(1);
         }
  bzero(&(serv_addr.sin_zero),8);

 /*open file, read it in memory*/
         if ((req = fopen(filename,"r")) == NULL) {
  perror("open file failed.");
exit(1);
         }

  filesize = GetFileSize(filename);
  buf_file = malloc(filesize+1);
  fread(buf_file,filesize,1,req);
  fclose(req);

/*connect to server,send file*/
  if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1) {
        perror("connect failed.");
                exit(1);
  }

  if (send (sockfd,buf_file,filesize,0) == -1) {
   perror("send failed.");
exit(1);
  }

/* recieve the file which server send*/
         if ((recvbytes = recv(sockfd, buf_file,filesize,0)) == -1) {
  perror("recieve failed.");
exit(1);
         }
 
/*write in file*/
        if ((res = fopen("response.xml","w+")) == NULL) {
perror("open file failed.");
exit(1);
        }
fwrite(buf_file,filesize,1,res);
fclose(res);

free(buf_file);
 
  return 0;
}

long GetFileSize(char fn[]) {
struct stat *buf;
if (stat (fn, buf) == -1) {
perror("Get statics of file failed.");
exit(1);
}

return buf->st_size;
}

谢谢各位帮忙。下班前结账。谢谢了。

|
long GetFileSize(char fn[]) {
struct stat *buf; //这里
if (stat (fn, buf) == -1) {
perror("Get statics of file failed.");
exit(1);
}

return buf->st_size;
}

|
同意楼上,没有分配内存,修改为

long GetFileSize(char fn[]) {
struct stat buf;
if (stat (fn, &buf) == -1) {
perror("Get statics of file failed.");
exit(1);
}

return buf.st_size;
}

    
 
 

您可能感兴趣的文章:

  • 我用newwin()的时候编译通过了,可是运行的时候报告Segmentation fault
  • 为什么gcc编译通过,gdb调试报“Segment fault”呢
  • 同多个线程通过同一个socket发送数据,操作系统底层会同步每个发送操作吗
  • 数据包通过dev_queue_xmit发送出去,dev_queue_xmit返回值为0,但是对方收不到数据包 ,本机也抓不到发送出去的包
  • 通过短信发送LOG归类号码发送情况的shell脚本
  • 通过互联网发送短信 Esmska
  • 通过socket连接一次性发送大数据量的问题
  • vc通过socket发送数据给java的问题
  • linux下几个设备通过串口串行连接,如何协调各串口发送数据
  • 数据包进入网卡后如何通过TCPIP协议进行发送
  • mini2440如何通过串口发送字符串,急求
  • 如何通过其他网站发送短消息(比如新浪)?JSP页面提交,高分请教!!
  • 请问怎么通过Socket发送一个int数值?急,谢谢!!
  • PHP通过飞信平台发送短信 FetionPHP
  • 有什么软件可以通过网络把文件从windows发送到嵌入式机的linux
  • 通过Oracle发送Email的实现方法
  • Sendmail 已经配置,但无法通过客户机发送邮件。(在先等待)
  • 通过linux驱动接口读取串口来自另外一个CPU发送的数据,有几个疑问:
  • linux 通过SG_IO发送SCSI命令
  • 怎样监测我的机器通过网卡都发送了什么东西?而不是像sniffer等检测收到了什么东西?
  • python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
  • 如何把用jdbc查出的resultset结果集数据通过网络发送到另一台机器上(给100分)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux下多网卡机器中,如何通过指定网卡来接受数据?
  • 无线网卡如果指定接收了一个AP发出的信号(通过指定ESSID),能同时接受到另一个AP发出的信号么?50分求助
  • 通过javascript实现DIV居中,兼容各浏览器版本
  • applet可以不通过数字签名,通过设置IE直接在本地访问本地文件吗
  • php通过socket_bind()设置IP地址代码示例
  • 我使用.net编译通过,但是使用g++编译不能通过。总是提示我undefined reference to ~myclass()
  • 通过javascript库JQuery实现页面跳转功能代码
  • 紧急求救!能通过jdbc怎样连接sqlsever 然后通过 for xml 关键字得到xml流吗?
  • c#通过委托delegate与Dictionary实现action选择器代码举例
  • 我想我的网站屏蔽掉通过某些网站过来的访问,我想通过htaccess 文件来做,请大家帮帮我。
  • linux下通过crond实现自动执行程序
  • 如何通过INTERNET访问通过共项一条线路上网的局域网中的机器???
  • 通过docker commit命令保存对docker容器的修改
  • 为什么g++编译通过了,而gcc却编译通过不了???
  • 通过docker run命令运行新的docker镜像
  • 请指点: 在windows下能否通过程序来获取linux下的用户列表,甚至通过自己写的windows程序界面增加修改linux的用户
  • 通过docker ps命令检查运行中的docker镜像
  • Jbuilder第一次编译说缺包,引入通过!然后把原来引入的注释,又通过!上帝,救我!
  • Session id实现通过Cookie来传输方法及代码参考
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • 通过docker search命令搜索可用docker镜像
  • 请指点: 在windows下能否通过程序来获取linux下的用户列表,甚至通过自己写的windows程序界面增加修改linux的用户 100分相赠
  • Python3通过request.urlopen实现Web网页图片下载
  • 工作站Redhat Linux7.2如何通过NT4.0 proxy代理服务器上网,我不能通过其验证!请高手指点思路和方法!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3