CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Linux/Unix社区 >  程序开发区

程序执行出错,求助!!!

楼主zhoufanking(风铃)2005-05-29 13:57:33 在 Linux/Unix社区 / 程序开发区 提问

学习编程,写了一个socket程序,client将int   ch[10]   传给server,然后server对每一个ch[i]乘以十再返回给client,client将ch[i]打印到屏幕,但是我得结果总不对,请帮我看看,代码如下:  
  /**************************client.c****************************************/  
  #include   <sys/types.h>  
  #include   <sys/socket.h>  
  #include   <stdio.h>  
  #include   <netinet/in.h>  
  #include   <arpa/inet.h>  
  #include   <unistd.h>  
   
  int   main(int   argc,   char*   argv[])  
  {  
   
      int   sockfd;  
      int   len,i   ;  
      struct   sockaddr_in   address;  
      int   res;  
      int   ch[10];  
      char   *server_addr;  
     
       
      if   (argc<2){  
          perror("too   few   arguments!!!");  
          exit(1);  
      }  
   
    server_addr   =   argv[1];  
   
    for(i=0;i<10;i++)  
  {  
    ch[i]=i;  
  }  
   
      //   create   a   socket   for   the   client  
      sockfd   =   socket   (   AF_INET   ,   SOCK_STREAM   ,   0   );  
   
      //   name   the   socket  
      address.sin_family   =   AF_INET   ;  
      address.sin_addr.s_addr   =   inet_addr(server_addr);  
      address.sin_port   =   9999;  
      len   =   sizeof(address);  
   
      //   connect   to   the   server  
      res   =   connect   (sockfd,   (struct   sockaddr   *)   &address,   len);  
   
      if(res   ==-1)  
          {  
              perror("oops:client2");  
              exit(1);  
          }  
   
     
      //   now   we   can   read   and   write   via   the   socket  
      write(sockfd,ch,   strlen(ch));  
      read(sockfd,ch,   strlen(ch));  
      for(i=0;i<10;i++)  
  {  
      printf("ch[%d]   from   server   is:   %d",i,ch[i]);  
  }  
   
      close(sockfd);  
  }  
   
  /***************************server.c******************************/  
  #include   <sys/types.h>  
  #include   <sys/socket.h>  
  #include   <stdio.h>  
  #include   <netinet/in.h>  
  #include   <arpa/inet.h>  
  #include   <unistd.h>  
  #include   <sys/un.h>  
   
  int   main()  
  {  
   
      int   server_sockfd   ,   client_sockfd;  
      int   server_len   ,   client_len;  
      struct   sockaddr_in   server_address;  
      struct   sockaddr_in   client_address;  
      int   i;  
   
      //   create   a   socket   for   the   server  
      server_sockfd   =   socket   (   AF_INET   ,   SOCK_STREAM   ,   0   );  
   
      //   name   the   socket  
      server_address.sin_family   =   AF_INET;  
      server_address.sin_addr.s_addr   =   inet_addr("192.168.0.222");  
      server_address.sin_port   =   9999;  
      server_len   =   sizeof(server_address);  
      bind   (server_sockfd   ,   (struct   sockaddr   *)&server_address,   server_len);  
   
   
      //   creat   a   queue   for   the   comming   clinet  
      listen(server_sockfd   ,   5);  
   
      while(1){  
       
          int     ch[10];  
          printf("server   waiting.\n");  
       
          //   accept   a   connection  
          client_len   =   sizeof(client_address);  
          client_sockfd   =   accept   (server_sockfd   ,   (   struct   sockaddr   *)   &client_address,   &client_len);  
   
          //   read   and   write   on   client  
          read(client_sockfd,ch,strlen(ch));  
   
  for(i=0;i<10;i++){  
  ch[i]*=10;  
  }  
          //printf("%d\n.",&ch);  
          write(client_sockfd   ,ch,strlen(ch));  
          close(client_sockfd);  
      }  
  }  
   
  问题点数:20、回复次数:7Top

1 楼zzbwang()回复于 2005-06-01 09:43:40 得分 5

用socket通信时应该使用函数send和recv,而你用read和write.Top

2 楼zhoufanking(风铃)回复于 2005-06-01 12:19:05 得分 0

read   和write也是可以的吧!我用write和read   读写过字符并成功了啊Top

3 楼shockwave_115(采姑娘的小蘑菇)回复于 2005-06-01 17:29:51 得分 5

不知道你遍一问题还是运行问题  
  有两个程序问题  
  server_address.sin_port   =   9999;//端口号不一定设置成功,要看运行时候是多少端口  
                                                                    //还有就是应该htons(9999);  
  另一个就是:  
  for(i=0;i<10;i++){  
  ch[i]*=10;}  
  你不一定读到了十个字符  
  还有你看看strlen(ch)是多少  
  你最好吧具体出错情况说一下Top

4 楼zhoufanking(风铃)回复于 2005-06-02 07:39:16 得分 0

是运行时出现的问题。结果是客户端的数组ch[10]里的数值没有改变,最后打印到屏幕的还是1到10,但是服务器端出了问题,打印出来的数据是乱的,我觉得应该是服务器端就没有真确的读到客户送来的这个数组。Top

5 楼shockwave_115(采姑娘的小蘑菇)回复于 2005-06-02 10:33:54 得分 5

数值没有变说明没有传输成功,不然肯定会有变化的Top

6 楼zhoufanking(风铃)回复于 2005-06-02 14:38:08 得分 0

应该是服务器端没有正确地接收到客户的数据,但是该怎么改呢!!Top

7 楼tb01412(tb)回复于 2005-06-05 00:01:12 得分 5

一般说来,在accept后需要派生一个单独的进程来处理数据!!!(或者是一个线程)  
  如果一次无法读取完所有数据,那么你可以考虑用循环读取的方式Top

相关问题

  • 编译后的程序执行出错。
  • 为什么我创建可执行程序时出错?
  • 程序打包以后,再执行出错
  • 程序执行出错!!!!我不知道为什么???
  • 程序执行总出错,帮我看看哪有问题啊
  • 安装asp.net环境后执行aspx程序出错的问题
  • 程序执行时出现某一地址访问出错
  • 请问下这段程序为什么回执行时出错
  • 一个C++程序执行出错,请帮看一下!
  • 程序出错!!!

关键词

  • client
  • socket
  • server
  • sockfd
  • ch
  • len
  • address
  • struct sockaddr
  • inet
  • sin

得分解答快速导航

  • 帖主:zhoufanking
  • zzbwang
  • shockwave_115
  • shockwave_115
  • tb01412

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo