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

请帮我看看这道程序什么地方错了

    来源: 互联网  发布时间:2016-09-29

    本文导语:  这是书上的一道例子,是一个客户端程序, 编译没问题,就是运行的时候出现段错误, 但我改了很久,它还是段错误 请大家帮我看一下吧 这是书上的源代码(为了不误导大家,我就不把我改的代码帖出来了) /* ti...

这是书上的一道例子,是一个客户端程序,
编译没问题,就是运行的时候出现段错误,
但我改了很久,它还是段错误
请大家帮我看一下吧

这是书上的源代码(为了不误导大家,我就不把我改的代码帖出来了)
/* timeclnt.c - a client for timeserv.c
 *              usage: timeclnt hostname portnumber
 */
#include       
#include       
#include       
#include       
#include       

#define        oops(msg)       { perror(msg); exit(1); }

main(int ac, char *av[])
{
struct sockaddr_in  servadd;        /* the number to call */
struct hostent      *hp;            /* used to get number */
int    sock_id, sock_fd;            /* the socket and fd  */
char   message[BUFSIZ];             /* to receive message */
int    messlen;                     /* for message length */

     /*
      * Step 1: Get a socket
      */

sock_id = socket( AF_INET, SOCK_STREAM, 0 );    /* get a line   */
if ( sock_id == -1 ) 
oops( "socket" );           /* or fail      */

     /*
      * Step 2: connect to server
      *         need to build address (host,port) of server  first
      */

bzero( &servadd, sizeof( servadd ) );   /* zero the address     */

hp = gethostbyname( av[1] );            /* lookup host's ip #   */
if (hp == NULL) 
oops(av[1]);             /* or die               */
bcopy(hp->h_addr, (struct sockaddr *)&servadd.sin_addr, hp->h_length);

servadd.sin_port = htons(atoi(av[2]));  /* fill in port number  */

servadd.sin_family = AF_INET ;          /* fill in socket type  */

       /* now dial     */
if ( connect(sock_id,(struct sockaddr *)&servadd, sizeof(servadd)) !=0)
       oops( "connect" );

     /*
      * Step 3: transfer data from server, then hangup
      */

messlen = read(sock_id, message, BUFSIZ);     /* read stuff   */
if ( messlen == - 1 )
       oops("read") ;
if ( write( 1, message, messlen ) != messlen )  /* and write to */
       oops( "write" );                        /* stdout       */
close( sock_id );    
}

|
你的代码是可以运行的哦!
但是参数不够 就会报段错误 
但是你需要注意的是 你使用的gethostbyname  所以第一个参数需要是hostname 不能是ip 第二个参数是端口
看我的运行过程
[root@CentOS tmp]# gcc -o timeserv timeserv.c
[root@CentOS tmp]# gcc -o timeclnt timeclnt.c
[root@CentOS tmp]# ./timeclnt localhost 13000
Wow! got a call!
The time here is ..Sun Sep 19 15:14:59 2010
[root@CentOS tmp]# ./timeclnt CentOS 13000
Wow! got a call!
The time here is ..Sun Sep 19 15:15:08 2010

|
bcopy(hp->h_addr, (struct sockaddr *)&servadd.sin_addr, hp->h_length);
==>
bcopy(hp->h_addr, &servadd.sin_addr, hp->h_length);

|
你怎么运行的?程序有什么输出信息吗?

|
不知道是不是socket和gethostbyname条用顺序的问题

|


楼上正解,bcopy 的api说明如下:
原型:extern void bcopy(const void *src, void *dest, int n);
用法:#include 
功能:将字符串src的前n个字节复制到dest中
说明:bcopy不检查字符串中的空字节NULL,函数没有返回值。

估计bcopy的实现里面,用dest这个指针的++操作。强制转换为struct sockaddr这种类型,每次就加这个结构体大小个字节,导致越界。

    
 
 

您可能感兴趣的文章:

  • 请帮我看看这段代码错在什么地方?谢谢
  • linux的帮助文件在什么地方啊,我想看看关于c++的帮助文件。另外从哪里能搞到c++的类库说明阿
  • 关于arm交叉编译的问题,请帮忙看看问题出在什么地方?
  • 谁能帮我看看下面的程序错在什么地方?
  • 来帮忙看看,前天装的系统,昨天晚上想装pidgin,弄了半天就是没搞好 刚用linux 很多地方不懂 网上也找不到方法
  • 初学java ,帮我看看错在什么地方?如何改?thx
  • 我是哪个初学java的冷雪儿,由于我的帐号分数太少,所以另换了一个帐号,我现在有一段程序,有很多地方不懂,各路大虾不妨进来帮我看看,
  • 帮忙看看这个Linux共享内存程序什么地方有问题?
  • 求高手帮我看看这段代码,问题出现在什么地方!
  • JSP程序出错,请给看看,谢了-----resin服务器
  • 看看程序错在那里?
  • 不能运行编译出来的程序,请大家帮忙看看
  • 哪位大侠帮我看看这个程序。
  • 想找些鼠标和键盘的驱动源程序看看,去哪找啊?
  • 帮我看看这道程序题目
  • 关于telnetd程序移植的问题,请了解Unix telnet过程的大侠帮忙看看
  • 请帮我看看下面的程序
  • 哪位大哥知道如何将rtf文件转化成html文件,请赐教,最好给个程序看看!多谢,多谢,120分奉上!!!
  • 我想找一些纯OO的jsp完整程序看看
  • 看看这个程序
  • 我要下载LINUX安装程序,不知道该下那个,大家看看
  • 谁能帮我看看这段程序,拜托了
  • 那位大侠给我一个线程池的例子程序看看
  • 看看这两个小程序
  • (在线等)关于主程序和线程的执行顺序。。。大家帮我看看
  • 高手们帮我看看这段程序??
  • 深圳的程序员朋友请进来看看!下周一结分
  • 小弟初入java这一行,很想看看已经编好的源程序,愿意指教的请发送到samgundam@sina.com!谢谢
  • 看看这个小程序错误在哪里,多谢了!!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 简单!看看这个方法!简单!看看这个方法!
  • linux高手看看
  • 好消息,近来看看......
  • 我想看看有关Linux和Unix的源码,有什么好的建议
  • 想看看linux的内核源代码!从哪里开始!给点建议!!
  • 我初学JAVA,大家愿意交朋友的进来看看!留QQ的给分啊!
  • 关于全选的问题大家帮忙看看~
  • jsp论坛,大家快去看看,解决树形目录http://52jsp.126.com
  • 各位大侠,小侠,快过来看看。
  • 看过操作系统设计与实现的进来看看
  • 请进来看看!!
  • 帮我看看下面这条语句??
  • 大家去软件工程论坛里面去看看那,我发了700分的问题!!
  • 建议去这里看看,有好多基本的重要知识! 绝对值得一看!
  • 大家帮我看看,我好把贴子结了,里面有100分。。。。。。
  • 到 http://www.xbit2008.com 看看技术文章把! 我写的或从网上摘的!
  • 虚心请教问题,帮我看看好吗?
  • 我刚申请的域名rootsafe.com大家看看怎么样? up有分!
  • 帮我看看是不是被黑了?
  • 我的Solaris启动不了了,请帮忙看看


  • 站内导航:


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

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

    浙ICP备11055608号-3