*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.
}
}
/*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:程序得一句一句地看,关键是看它具体什么意思。
PS:程序得一句一句地看,关键是看它具体什么意思。
#8
有这种软件么?
#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.
}
}
/*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:程序得一句一句地看,关键是看它具体什么意思。
PS:程序得一句一句地看,关键是看它具体什么意思。
#8
有这种软件么?
#9
BLESS