有没有会linux C语言编程的高手帮我看看这个程序呢?每一行都用中文注解一下

时间:2022-10-22 08:55:04
/*server.c
 *Copyright Mark Watson 1999. Open Source Software License.
 */
 #include<stdio.h>
 #include<sys/socket.h>
 #include<netinet/in.h>
 #include<arpa/inet.h>
 #include<netdb.h>
 int port=8000;
 void main()
  {struct sockaddr_in sin;
   struct sockaddr_in pin;
   int sock_descriptor;
   int temp_sock_descriptor;
   int address_size;
   char buf[16384];
   int i,len;
   sock_descriptor=socket(AF_INET,SOCE_STREAM,0);
   if(sock_descriptor==-1)
      {perror("call to socket");
       exit(1);
       }
    bzero(&sin,sizeof(sin));
    sin.sin_family=AF_INET;
    sin.sin_addr.s_addr=INADDR_ANY;
    sin.sin_port=htons(port);
    if(bind(sock_descriptor,(struct sockaddr*)&sin,sizeof(sin))==-1)
      {perror("call to bind");
       exit(1);
       }
     if(listen(sock_descriptor,20)==-1)
       {perror("call to listen");
        exit(1);
        }
      print("Accepting connections ...\n");
     while(1)
      {temp_sock_descriptor=accept(sock_descriptor,(struct sockaddr*)&pin,&address_size);
      if(temp_sock_descriptor==-1)
       {perror("call to accept");
        exit(1);
       }
       if(recv(temp_sock_descriptor,buf,16384,0)==-1)
        {perror("call to recv");
         exit(1);
         }
       printf("received from client:%s\n",buf);
       //for this server example,we just convert the
       //characters to upper case:
       len=strlen(buf);
       for(i=0;i<len;i++)
         buf[i]=toupper(buf[i]);
        if(send(temp_sock_descriptor,buf,len,0)==-1)
        {perror("call to send");
         exit(1);
         }
         close(temp_sock_descriptor);
         }
        }
        尽量每行都帮我中文解释一下,绝对菜鸟新手,刚看了一遍C语言,现在要学Linux下的C语言编程,这个程序很多看不明白,望高手不吝赐教!在这里先行谢过了

9 个解决方案

#1


先用金山译霸把这个程序过一遍。

#2


新手学习先别看这些开源的程序,先把语言弄明白了。
这里不仅仅是语言的东西,很多是网络相关内容。

#3


还是先看看编程思想,再来看这个就容易了,C只是语言,一种工具,程序是以工具表达出来的一种思想.

/*server.c 
*Copyright Mark Watson 1999. Open Source Software License. 
*/ 
#include <stdio.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <netdb.h> 
//以上是包含头文件

int port=8000; //定义端口为8000


void main() 
  {struct sockaddr_in sin; 
  struct sockaddr_in pin; //定义两个sockaddr_in 结构变量.
  int sock_descriptor; //定义sock描述变量
  int temp_sock_descriptor; //定义临时sock描述变量
  int address_size; //地址尺寸
  char buf[16384]; //定义16384地址空间作为缓存
  int i,len; 


  sock_descriptor=socket(AF_INET,SOCE_STREAM,0); //获取sock描述


  if(sock_descriptor==-1) 
      {perror("call to socket"); //打印出错原因.
      exit(1); //失败则退出
      } 


    bzero(&sin,sizeof(sin)); //好像是清零SIN结构吧.
    sin.sin_family=AF_INET; 
    sin.sin_addr.s_addr=INADDR_ANY; 
    sin.sin_port=htons(port); 
//如果成功获取,则给结构变量sin初始值.

    if(bind(sock_descriptor,(struct sockaddr*)&sin,sizeof(sin))==-1) 
      {perror("call to bind"); //打印出错原因.
      exit(1); //绑定获取的sock,失败则退出
      } 

    if(listen(sock_descriptor,20)==-1) 
      {perror("call to listen"); //打印出错原因.
        exit(1); //听取失败则退出
        } 


      print("Accepting connections ...\n"); //打印接受链接消息


    while(1) //进入循环
      {
       temp_sock_descriptor=accept(sock_descriptor,(struct sockaddr*)&pin,&address_size); //获取链接后的sock描述值.
       if(temp_sock_descriptor==-1) 
        {perror("call to accept"); //打印出错原因.
         exit(1); //获取失败则退出.
        } 

        if(recv(temp_sock_descriptor,buf,16384,0)==-1) //接受temp_sock_descriptor指定的sock的请求.
         {perror("call to recv"); //打印出错原因.
         exit(1); //接受失败则退出
         } 

       printf("received from client:%s\n",buf); //打印接受存入buf里的消息

       //for this server example,we just convert the 
       //characters to upper case: 

       len=strlen(buf); 

       for(i=0;i <len;i++) 
        buf[i]=toupper(buf[i]); //处理buf里的数据

        if(send(temp_sock_descriptor,buf,len,0)==-1) //发送处理后的数据到temp_sock_descriptor指定的sock
        {perror("call to send"); //打印出错原因.
        exit(1); //失败后则退出.
        } 

        close(temp_sock_descriptor); //关闭temp_sock_descriptor指定的sock.
       } 
     } 

#4


首先,你要了解linux下的网络编程

#5


挺基本的socket的编程,你要看的不是C,是socket编程。

#6


我刚工作接触这个的时候也是一头雾水 呵呵 多看看就明白了  把这一段放到一个工程里面看就好了应该

#7


逐行翻译????那不是人干的事儿,找机器软件去……

PS:程序得一句一句地看,关键是看它具体什么意思。

#8


引用 7 楼 jillnicky 的回复:
逐行翻译????那不是人干的事儿,找机器软件去…… 

PS:程序得一句一句地看,关键是看它具体什么意思。


有这种软件么?

#9


BLESS

#1


先用金山译霸把这个程序过一遍。

#2


新手学习先别看这些开源的程序,先把语言弄明白了。
这里不仅仅是语言的东西,很多是网络相关内容。

#3


还是先看看编程思想,再来看这个就容易了,C只是语言,一种工具,程序是以工具表达出来的一种思想.

/*server.c 
*Copyright Mark Watson 1999. Open Source Software License. 
*/ 
#include <stdio.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <netdb.h> 
//以上是包含头文件

int port=8000; //定义端口为8000


void main() 
  {struct sockaddr_in sin; 
  struct sockaddr_in pin; //定义两个sockaddr_in 结构变量.
  int sock_descriptor; //定义sock描述变量
  int temp_sock_descriptor; //定义临时sock描述变量
  int address_size; //地址尺寸
  char buf[16384]; //定义16384地址空间作为缓存
  int i,len; 


  sock_descriptor=socket(AF_INET,SOCE_STREAM,0); //获取sock描述


  if(sock_descriptor==-1) 
      {perror("call to socket"); //打印出错原因.
      exit(1); //失败则退出
      } 


    bzero(&sin,sizeof(sin)); //好像是清零SIN结构吧.
    sin.sin_family=AF_INET; 
    sin.sin_addr.s_addr=INADDR_ANY; 
    sin.sin_port=htons(port); 
//如果成功获取,则给结构变量sin初始值.

    if(bind(sock_descriptor,(struct sockaddr*)&sin,sizeof(sin))==-1) 
      {perror("call to bind"); //打印出错原因.
      exit(1); //绑定获取的sock,失败则退出
      } 

    if(listen(sock_descriptor,20)==-1) 
      {perror("call to listen"); //打印出错原因.
        exit(1); //听取失败则退出
        } 


      print("Accepting connections ...\n"); //打印接受链接消息


    while(1) //进入循环
      {
       temp_sock_descriptor=accept(sock_descriptor,(struct sockaddr*)&pin,&address_size); //获取链接后的sock描述值.
       if(temp_sock_descriptor==-1) 
        {perror("call to accept"); //打印出错原因.
         exit(1); //获取失败则退出.
        } 

        if(recv(temp_sock_descriptor,buf,16384,0)==-1) //接受temp_sock_descriptor指定的sock的请求.
         {perror("call to recv"); //打印出错原因.
         exit(1); //接受失败则退出
         } 

       printf("received from client:%s\n",buf); //打印接受存入buf里的消息

       //for this server example,we just convert the 
       //characters to upper case: 

       len=strlen(buf); 

       for(i=0;i <len;i++) 
        buf[i]=toupper(buf[i]); //处理buf里的数据

        if(send(temp_sock_descriptor,buf,len,0)==-1) //发送处理后的数据到temp_sock_descriptor指定的sock
        {perror("call to send"); //打印出错原因.
        exit(1); //失败后则退出.
        } 

        close(temp_sock_descriptor); //关闭temp_sock_descriptor指定的sock.
       } 
     } 

#4


首先,你要了解linux下的网络编程

#5


挺基本的socket的编程,你要看的不是C,是socket编程。

#6


我刚工作接触这个的时候也是一头雾水 呵呵 多看看就明白了  把这一段放到一个工程里面看就好了应该

#7


逐行翻译????那不是人干的事儿,找机器软件去……

PS:程序得一句一句地看,关键是看它具体什么意思。

#8


引用 7 楼 jillnicky 的回复:
逐行翻译????那不是人干的事儿,找机器软件去…… 

PS:程序得一句一句地看,关键是看它具体什么意思。


有这种软件么?

#9


BLESS