#include #define LINELEN 128
extern int errno;
int TCPecho(const char *host, const char *service);
int errexit(const char *format,...);
int connectsock(const char *host, const char *service, const char *transport );
int connectTCP(const char *host, const char *service);
int main(int argc, char *argv[]){
char *host= "localhost";
char *service= "echo";
switch(argc){
case 1:
host = "localhost";
break;
case 3:
service = argv[2];
case 2:
host=argv[1];
break;
default:
fprintf(stderr,"usage:TCPecho[host[port]]\n");
exit(1);
}
TCPecho(host,service);
exit(0);
}
int TCPecho(const char *host,const char *service){
char buf[LINELEN+1];
int s,n;
int outchars, inchars;
s=connectTCP(host, service);
while(fgets(buf,sizeof(buf),stdin)){
buf[LINELEN]=\0;
outchars=strlen(buf);
(void)write(s,buf,outchars);
for(inchars=0;incharss_port;
else if ((sin.sin_port=htons((unsigned short)atoi(service))) == 0)
errexit("cant get \"%s\" service entry\n", service);
if ( phe = gethostbyname(host) )
memcpy(&sin.sin_addr, phe->h_addr, phe->h_length);
else if ( (sin.sin_addr.s_addr = inet_addr(host)) == INADDR_NONE )
errexit("cant get \"%s\" host entry\n", host);
if ( (ppe = getprotobyname(transport)) == 0)
errexit("cant get \"%s\" protocol entry\n", transport);
if (strcmp(transport, "udp") == 0)
type = SOCK_DGRAM;
else
type = SOCK_STREAM;
s = socket(PF_INET, type, ppe->p_proto);
if (s < 0)
errexit("cant create socket: %s\n", strerror(errno));
if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0)
errexit("cant connect to %s.%s: %s\n", host, service,
strerror(errno));
return s;
}
int connectTCP(const char *host, const char *service){
return connectsock(host,service,"tcp");
}
4. 编译并调试程序
切换到源代码所在的目录,使用GCC指令进行编译
$ GCC –o echo_c echo_c.c
八、实验数据及结果分析:
在源程序所在的目录键入./echo_c命令,得到下面的运行结果:
九、总结、改进建议及心得体会:
1.在本次实验中,我复习了有关于ubtuntu的知识,对基本操作更加熟练。能够在ubtuntu操作系统下编写编译简单的C语言程序。同时也学会了比如ScureCRT等工具的使用。
2.加深了对于echo服务的理解,同时也锻炼了自己的编程能力。
【本文档内容可以自由复制内容或自由编辑修改内容期待你的好评和关注,我们将会做得更好】
精选范本,供参考!