2023年8月2日发(作者:)

VI程序设计试题B

得分

评阅人

一、选择题(共10题,每题2分,共20分)

( ) 1. 下列关于Linux安装的说法中,不正确的是 。

A.如果计算机的内存为128MB,则SWAP分区(交换分区)的大小通常设定为256M。

B.安装时Linux分区的文件系统类型一般为ext2或ext3。

C.安装时要进行磁盘分区,如果选择“自动分区”,系统会自动保留硬盘上原来的数据。

除了可以从光盘安装外,还可以从网上下载Linux的iso映像文件,从硬盘安装。

( ) 2. 下列说法中,不正确的是 。

A. Shell程序编写完后还需要用gcc编译器编译。

B.可以通过将shell程序作为sh命令的输入来执行shell程序。

C. shell程序中定义的函数不能有参数。

D. Linux是免费使用和自由传播的类UNIX操作系统,但它并不是没有版权。

( ) 3. 为了利用GDB调试C/C++程序,在编译时需要把调试信息加载到可执行文件中,则用GCC编译源程序时,需要利用选项 。

A. –O2 B. -E C. –Wall D. -g

( ) 4. $temp=’world’;echo hello’$temp’

上述命令执行的结果为 。

A. helloworld B. hello$temp C. hello’world’ D. hello

( ) 5. 下列关于网络编程的叙述中,错误的是 。

A.一个完整的网络程序应该包含两个独立的程序,它们分别运行在客户端和服务器端。

B.相同条件下UDP发送数据的速度要比TCP快。

C. 当使用UDP编程时,如果函数sendto( )成功返回,表示系统发出的数据被通讯的对方准确接收到了。

D.端口号是16bit的地址码,端口号和IP地址构成一个插口(socket)。

( ) 6. 某shell程序在运行时需要向脚本传递参数,则为了得到所有命令行参数的个数,我们可以使用变量 。

A. $@ B. $# C. $0 D. $!

( ) 7. 将当前目录下的文件移动到目录/home/linux下的命令为 。

A. cp /home/linux

B. mv /home/linux

D. mv /root/ /home/linux/ C. lls / home/linux/ ( ) 8. 在linux下进行shell编程时,注释符是 。

A. # B. // C. /* */ D. 以上都不对

( ) 9. 任何时候用户需要回到用户主目录时可以使用命令 。

A. cd B. pwd C. path D. cd .

( ) 10. 文件exer1的访问权限为744,现要取消文件所有者的执行权限,同时增加同组用户的写权限,下列命令中正确的是 。

A. chmod u+x, g+w exer1

C. chmod a-x, g+w exer1

B. chmod 646 exer1

D. chmod g+w exer1

得分

评阅人

二、填空题(共13题,每空1分,共15分)

11. 就是将前一个命令的标准输出作为后一个命令的标准输入。

12. Linux有两种工作界面:字符界面和图形界面,其中 界面功能更强大。

13. 常用的socket类型有两种: 和 。

14. 将文件file1和文件file2连接成文件file3的命令是 。

15. 传递给shell脚本的位置参数只有前9个可以被访问,为了访问第9个位置参数以后的参数,可以使用命令 。

16. shell不仅是用户命令的解释器,同时也是一种功能强大的 , 是Linux缺省的shell。

17. 在shell编程时,如果将测试条件置于方括号内,应注意方括号两边必须有 。

18. 有时用户需要在一行给出多个shell命令,假定输入的命令都需要运行,则在shell提示符下输入命令时,可在命令之间加上符号 。

19. 为了获得父进程的ID号,可是使用函数 。

20. 在用bash命令调试shell程序时,为了将shell执行的每一个命令行都显示出来,应该使用bash的选项 。

21. 在Linux下调试c程序时,在提示符(gdb)下输入b 10表示 。

22. 你是公司的Linux服务的管理员。你想查看/root下文件和文件夹的赋权的详细列表,可以使用命令 。

23. 在用vi编辑好文件后,为了将文件内容存入文件中并退出vi(开始进入vi时并未输入文件名),应在末行模式下键入 。

得分

评阅人

三、简答题(共2题,共10分)

22. 试分别说明Linux下shell程序和C程序从编写到运行的一般步骤。(本题满分5分)

23. vi编辑器有哪几种工作模式?各工作模式之间如何进行转化?(本题满分5分)

得分

评阅人

四、读程序题(共2题,共20分)

24. 阅读程序,写出程序的执行结果,并分析程序的执行过程。(本题满分10分)

#include

#include

int main()

{

pid_t result;

int var=10;

printf("before fork,var=%dn",var);

result=fork();

if(result<0)

printf("fork failn");

else if(result>0)

{

var++;

printf("This is parent!n”);

}

else

{

var- -;

printf("This is child!n");

}

printf("after fork var=%dn",var);

return 0;

} 假定父子进程均可在一个时间片内执行完,且操作系统每次均先调度子进程。

25. 某Shell程序以一个普通文件作为参数,其功能是:判断文件的大小是否为0,如果是则删除它;否则将该文件的内容输出到标准输出,请将程序补充完整。(本题满分10分)

#!/bin/sh

FILENAME=

echo -n "Input file name:"

#输入文件名

#如果不是文件

then

#shell程序直接退出

fi

#判断该文件是否为空

then

#为空则删除它

else

cat $FILENAME #否则输出文件的内容到标准输出

fi

得分

评阅人

五、编程题(共3题,共35分)

26. 假如你是机房系统管理员,某班上的80个学生在机房的Linux服务器上共创建了80个帐号,帐号名为“user20060001”~“user20060080”,现在课程结束了,这些帐号均不再使用。试编写一个shell程序,删除学生所建的上述帐号。(本题满分12分)

27. 试编写一个简单的C程序,分别列出在终端tty1~tty6共6个终端上运行的所有进程。(本题满分8分)

28. 设计一个程序,当用户从客户端输入“Hello,Server”,传送到服务器端,变成“Hello,Client”,送回客户端;如果从客户端输入“Hello,ABC”,传送到服务器端,则变成“Hello,abc”,送回客户端;如果从客户端输入“exit”,传送到服务器端,服务器端程序退出,不向客户端送回任何信息;上述三种情况之外的其它情况,从客户端输入的内容经服务器后均原样送回客户端。(本题满分15分)

VI程序设计试题答案

一、

选择题(共10题,每题2分,共20分)

1.C

6.B

2.A

7.B

3.D

8.A

4.B

9.A

5.C

10.C

二、

填空题(共13题,每空1分,共15分)

11.管道(或者“|”)

12.字符界面

13.流式socket(流式套接字,SOCK_STREAM),数据报式socket(数据报式套接字,SOCK_DGRAM)

14.cat file1 file2 > file3 15.shift

20. -v

16.编程语言 bash 17.空格

18.; 19.getppid()

成ls –l也算对)

(或者x )

21.在第10行设置断点 22. ls –l /root(写三、简答题(共2题,共10分)

22. 试分别说明Linux下shell程序和C程序从编写到运行的一般步骤。(本题满分5分)

(1) 在linux的命令提示符下启动编辑器,如输入vi,启动vi编辑器。

(2) 输入程序的内容,然后保存,退出。

(3) 如果编写的是shell程序,在运行前需要增加执行权限,可通过如下语句:

chmod +x filename

如果编写的是c程序,则进行编译,GCC 源文件 –o 目标文件。

(4) 如果发现程序有语法错误或者逻辑错误,则需要继续调试程序,直至程序无任何语法错误或逻辑错误。

(5) 运行程序 ./可执行文件名

23. vi编辑器有哪几种工作模式?各工作模式之间如何进行转化?(本题满分5分)

vi有三种工作模式:命令行模式,文本输入模式,末行模式。各模式之间的切换如下图所示:

shell提示符

退出vi 启动vi

命令模式

<:>键

自动返回

插入模式

末行模式

文本插入命令

四、读程序题(共2题,共20分)

24

before fork,var=10

This is child

after fork var=9

before fork,var=10

This is parent!

after fork var=11

程序的执行过程如下:

程序先定义了两个变量result和var,然后输出变量var的值,

得到"before fork var=10"这一行输出(父子进程各复制了一份)。当执行到result=fork()时程序分叉,产生父子两个进程。系统首先调度子进程执行,直至子进程结束。(

题目假定父子进程均可在一个时间片内执行完,且操作系统每次均先调度子进程。)

而在子进程中result为0,故走的是条件分支的最后一个分支,输出:

This is child.

after fork var=9

子进程执行完了之后调度父进程执行,直至父进程结束。而在父进程中result为子进程号,大于0,于是走条件分支的第二个个分支,输出:

This is parent

after fork var=11

25

#!/bin/sh

FILENAME=

echo -n "Input file name:"

read FILENAME

if [ ! -f $FILENAME ]

then

exit

fi

if [ ! -s $FILENAME ]

then

rm $FILENAME

else

cat $FILENAME

fi

五、编程题(共3题,共35分)

26. 假如你是机房系统管理员,某班上的80个学生在机房的Linux服务器上共创建了80个帐号,帐号名为“user20060001”~“user20060080”,现在课程结束了,这些帐号均不再使用。试编写一个shell程序,删除学生所建的上述帐号。(本题满分12分)

参考程序如下:

#!/bin/sh

i=1

while [ $i -le 80 ]; do

if [ $i -le 9 ]

then

USERNAME=user2006000$i

else

USERNAME=user200600$i;

fi

if [ -d /home/$USERNAME ];then

userdel -r $USERNAME

fi

let i=i+1

done

27. 试编写一个简单的C程序,分别列出在终端tty1~tty6共6个终端上运行的所有进程。

(本题满分8分)

#include

#include

main()

{

char command[81];

int i;

for(i=1;i<8;i++)

{

sprintf(command,"ps -t tty%d",i);

system(command);

}

}

28. 设计一个程序,当用户从客户端输入“Hello,Server”,传送到服务器端,变成“Hello,Client”,送回客户端;如果从客户端输入“Hello,ABC”,传送到服务器端,则变成“Hello,abc”,送回客户端;如果从客户端输入“exit”,传送到服务器端,服务器端程序退出,不向客户端送回任何信息;上述三种情况之外的其它情况,从客户端输入的内容经服务器后均原样送回客户端。(本题满分15分)

//参考程序

//socket_server.c

#include

#include

#include

#include

#include #include

#include

#include

#define SERVPORT 3333

#define BACKLOG 9

main()

{

int sockfd,client_fd;

int sin_size;

int recvbytes;

struct sockaddr_in my_addr;

struct sockaddr_in remote_addr;

char buf[100];

if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)

{

perror("socket creation error");

exit(1);

}

my__family=AF_INET;

my__port=htons(SERVPORT);

my__addr.s_addr = INADDR_ANY;

bzero(&(my__zero),8);

if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) {

perror("bind error");

exit(1);

}

if(listen(sockfd, BACKLOG) == -1)

{

perror("listen error");

exit(1);

}

while(1)

{

sin_size = sizeof(struct sockaddr_in);

if ((client_fd = accept(sockfd, (struct sockaddr *)&remote_addr, &sin_size)) == -1)

{

perror("accept error");

continue;

}

printf("received a connection from %sn", inet_ntoa(remote__addr));

memset(buf,'0',sizeof(buf)); recvbytes=recv(client_fd,buf,sizeof(buf),0);

printf("the recvbytes is:%dn",recvbytes);

if(recvbytes == -1)

{

perror("recv error!");

exit(0);

}

printf("Received msg is:%sn",buf);

if(strncmp(buf,"Hello,Server",sizeof("Hello,Server"))==0)

{

memcpy(buf,"Hello,Client",sizeof("Hello,Client"));

}

if(strncmp(buf,"Hello,ABC",sizeof("Hello,ABC"))==0)

{

memcpy(buf,"Hello,abc",sizeof("Hello,abc"));

}

if(strncmp(buf,"exit",strlen("exit"))==0)

{

printf("the server program will exit.n");

close(client_fd);

exit(0);

}

printf("the msg to be sent is:%sn",buf);

if(send(client_fd, buf, strlen(buf), 0) == -1)

perror("send error");

}

}

//socket_client.c

#include

#include

#include

#include

#include

#include

#include

#include

#define SERVPORT 3333

#define SERVPORT1 8888

#define MAXDATASIZE 90

main(int argc, char *argv[]) {

int sockfd, recvbytes,sendbytes,client_fd;

char buf[MAXDATASIZE];

struct hostent *host;

struct sockaddr_in serv_addr;

struct sockaddr_in my_addr;

if (argc < 3)

{

fprintf(stderr,"Please enter the server's hostname and the msg to be sent!n");

exit(1);

}

if((host=gethostbyname(argv[1]))==NULL)

{

herror("gethostbyname error");

exit(1);

}

if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)

{

perror("socket creation error!");

exit(1);

}

serv__family=AF_INET;

serv__port=htons(SERVPORT);

serv__addr = *((struct in_addr *)host->h_addr);

bzero(&(serv__zero),8);

if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1)

{

perror("connect error");

exit(1);

}

printf("the msg to be sent is:%sn",argv[2]);

sendbytes=send(sockfd,argv[2],strlen(argv[2]),0);

if(sendbytes==-1)

perror("send error");

memset(buf,'0',sizeof(buf));

if ((recvbytes=recv(sockfd, buf, MAXDATASIZE, 0)) ==-1)

{

perror("recv error");

exit(1); }

printf("Received: %sn",buf);

close(sockfd);

}

2023年8月2日发(作者:)

VI程序设计试题B

得分

评阅人

一、选择题(共10题,每题2分,共20分)

( ) 1. 下列关于Linux安装的说法中,不正确的是 。

A.如果计算机的内存为128MB,则SWAP分区(交换分区)的大小通常设定为256M。

B.安装时Linux分区的文件系统类型一般为ext2或ext3。

C.安装时要进行磁盘分区,如果选择“自动分区”,系统会自动保留硬盘上原来的数据。

除了可以从光盘安装外,还可以从网上下载Linux的iso映像文件,从硬盘安装。

( ) 2. 下列说法中,不正确的是 。

A. Shell程序编写完后还需要用gcc编译器编译。

B.可以通过将shell程序作为sh命令的输入来执行shell程序。

C. shell程序中定义的函数不能有参数。

D. Linux是免费使用和自由传播的类UNIX操作系统,但它并不是没有版权。

( ) 3. 为了利用GDB调试C/C++程序,在编译时需要把调试信息加载到可执行文件中,则用GCC编译源程序时,需要利用选项 。

A. –O2 B. -E C. –Wall D. -g

( ) 4. $temp=’world’;echo hello’$temp’

上述命令执行的结果为 。

A. helloworld B. hello$temp C. hello’world’ D. hello

( ) 5. 下列关于网络编程的叙述中,错误的是 。

A.一个完整的网络程序应该包含两个独立的程序,它们分别运行在客户端和服务器端。

B.相同条件下UDP发送数据的速度要比TCP快。

C. 当使用UDP编程时,如果函数sendto( )成功返回,表示系统发出的数据被通讯的对方准确接收到了。

D.端口号是16bit的地址码,端口号和IP地址构成一个插口(socket)。

( ) 6. 某shell程序在运行时需要向脚本传递参数,则为了得到所有命令行参数的个数,我们可以使用变量 。

A. $@ B. $# C. $0 D. $!

( ) 7. 将当前目录下的文件移动到目录/home/linux下的命令为 。

A. cp /home/linux

B. mv /home/linux

D. mv /root/ /home/linux/ C. lls / home/linux/ ( ) 8. 在linux下进行shell编程时,注释符是 。

A. # B. // C. /* */ D. 以上都不对

( ) 9. 任何时候用户需要回到用户主目录时可以使用命令 。

A. cd B. pwd C. path D. cd .

( ) 10. 文件exer1的访问权限为744,现要取消文件所有者的执行权限,同时增加同组用户的写权限,下列命令中正确的是 。

A. chmod u+x, g+w exer1

C. chmod a-x, g+w exer1

B. chmod 646 exer1

D. chmod g+w exer1

得分

评阅人

二、填空题(共13题,每空1分,共15分)

11. 就是将前一个命令的标准输出作为后一个命令的标准输入。

12. Linux有两种工作界面:字符界面和图形界面,其中 界面功能更强大。

13. 常用的socket类型有两种: 和 。

14. 将文件file1和文件file2连接成文件file3的命令是 。

15. 传递给shell脚本的位置参数只有前9个可以被访问,为了访问第9个位置参数以后的参数,可以使用命令 。

16. shell不仅是用户命令的解释器,同时也是一种功能强大的 , 是Linux缺省的shell。

17. 在shell编程时,如果将测试条件置于方括号内,应注意方括号两边必须有 。

18. 有时用户需要在一行给出多个shell命令,假定输入的命令都需要运行,则在shell提示符下输入命令时,可在命令之间加上符号 。

19. 为了获得父进程的ID号,可是使用函数 。

20. 在用bash命令调试shell程序时,为了将shell执行的每一个命令行都显示出来,应该使用bash的选项 。

21. 在Linux下调试c程序时,在提示符(gdb)下输入b 10表示 。

22. 你是公司的Linux服务的管理员。你想查看/root下文件和文件夹的赋权的详细列表,可以使用命令 。

23. 在用vi编辑好文件后,为了将文件内容存入文件中并退出vi(开始进入vi时并未输入文件名),应在末行模式下键入 。

得分

评阅人

三、简答题(共2题,共10分)

22. 试分别说明Linux下shell程序和C程序从编写到运行的一般步骤。(本题满分5分)

23. vi编辑器有哪几种工作模式?各工作模式之间如何进行转化?(本题满分5分)

得分

评阅人

四、读程序题(共2题,共20分)

24. 阅读程序,写出程序的执行结果,并分析程序的执行过程。(本题满分10分)

#include

#include

int main()

{

pid_t result;

int var=10;

printf("before fork,var=%dn",var);

result=fork();

if(result<0)

printf("fork failn");

else if(result>0)

{

var++;

printf("This is parent!n”);

}

else

{

var- -;

printf("This is child!n");

}

printf("after fork var=%dn",var);

return 0;

} 假定父子进程均可在一个时间片内执行完,且操作系统每次均先调度子进程。

25. 某Shell程序以一个普通文件作为参数,其功能是:判断文件的大小是否为0,如果是则删除它;否则将该文件的内容输出到标准输出,请将程序补充完整。(本题满分10分)

#!/bin/sh

FILENAME=

echo -n "Input file name:"

#输入文件名

#如果不是文件

then

#shell程序直接退出

fi

#判断该文件是否为空

then

#为空则删除它

else

cat $FILENAME #否则输出文件的内容到标准输出

fi

得分

评阅人

五、编程题(共3题,共35分)

26. 假如你是机房系统管理员,某班上的80个学生在机房的Linux服务器上共创建了80个帐号,帐号名为“user20060001”~“user20060080”,现在课程结束了,这些帐号均不再使用。试编写一个shell程序,删除学生所建的上述帐号。(本题满分12分)

27. 试编写一个简单的C程序,分别列出在终端tty1~tty6共6个终端上运行的所有进程。(本题满分8分)

28. 设计一个程序,当用户从客户端输入“Hello,Server”,传送到服务器端,变成“Hello,Client”,送回客户端;如果从客户端输入“Hello,ABC”,传送到服务器端,则变成“Hello,abc”,送回客户端;如果从客户端输入“exit”,传送到服务器端,服务器端程序退出,不向客户端送回任何信息;上述三种情况之外的其它情况,从客户端输入的内容经服务器后均原样送回客户端。(本题满分15分)

VI程序设计试题答案

一、

选择题(共10题,每题2分,共20分)

1.C

6.B

2.A

7.B

3.D

8.A

4.B

9.A

5.C

10.C

二、

填空题(共13题,每空1分,共15分)

11.管道(或者“|”)

12.字符界面

13.流式socket(流式套接字,SOCK_STREAM),数据报式socket(数据报式套接字,SOCK_DGRAM)

14.cat file1 file2 > file3 15.shift

20. -v

16.编程语言 bash 17.空格

18.; 19.getppid()

成ls –l也算对)

(或者x )

21.在第10行设置断点 22. ls –l /root(写三、简答题(共2题,共10分)

22. 试分别说明Linux下shell程序和C程序从编写到运行的一般步骤。(本题满分5分)

(1) 在linux的命令提示符下启动编辑器,如输入vi,启动vi编辑器。

(2) 输入程序的内容,然后保存,退出。

(3) 如果编写的是shell程序,在运行前需要增加执行权限,可通过如下语句:

chmod +x filename

如果编写的是c程序,则进行编译,GCC 源文件 –o 目标文件。

(4) 如果发现程序有语法错误或者逻辑错误,则需要继续调试程序,直至程序无任何语法错误或逻辑错误。

(5) 运行程序 ./可执行文件名

23. vi编辑器有哪几种工作模式?各工作模式之间如何进行转化?(本题满分5分)

vi有三种工作模式:命令行模式,文本输入模式,末行模式。各模式之间的切换如下图所示:

shell提示符

退出vi 启动vi

命令模式

<:>键

自动返回

插入模式

末行模式

文本插入命令

四、读程序题(共2题,共20分)

24

before fork,var=10

This is child

after fork var=9

before fork,var=10

This is parent!

after fork var=11

程序的执行过程如下:

程序先定义了两个变量result和var,然后输出变量var的值,

得到"before fork var=10"这一行输出(父子进程各复制了一份)。当执行到result=fork()时程序分叉,产生父子两个进程。系统首先调度子进程执行,直至子进程结束。(

题目假定父子进程均可在一个时间片内执行完,且操作系统每次均先调度子进程。)

而在子进程中result为0,故走的是条件分支的最后一个分支,输出:

This is child.

after fork var=9

子进程执行完了之后调度父进程执行,直至父进程结束。而在父进程中result为子进程号,大于0,于是走条件分支的第二个个分支,输出:

This is parent

after fork var=11

25

#!/bin/sh

FILENAME=

echo -n "Input file name:"

read FILENAME

if [ ! -f $FILENAME ]

then

exit

fi

if [ ! -s $FILENAME ]

then

rm $FILENAME

else

cat $FILENAME

fi

五、编程题(共3题,共35分)

26. 假如你是机房系统管理员,某班上的80个学生在机房的Linux服务器上共创建了80个帐号,帐号名为“user20060001”~“user20060080”,现在课程结束了,这些帐号均不再使用。试编写一个shell程序,删除学生所建的上述帐号。(本题满分12分)

参考程序如下:

#!/bin/sh

i=1

while [ $i -le 80 ]; do

if [ $i -le 9 ]

then

USERNAME=user2006000$i

else

USERNAME=user200600$i;

fi

if [ -d /home/$USERNAME ];then

userdel -r $USERNAME

fi

let i=i+1

done

27. 试编写一个简单的C程序,分别列出在终端tty1~tty6共6个终端上运行的所有进程。

(本题满分8分)

#include

#include

main()

{

char command[81];

int i;

for(i=1;i<8;i++)

{

sprintf(command,"ps -t tty%d",i);

system(command);

}

}

28. 设计一个程序,当用户从客户端输入“Hello,Server”,传送到服务器端,变成“Hello,Client”,送回客户端;如果从客户端输入“Hello,ABC”,传送到服务器端,则变成“Hello,abc”,送回客户端;如果从客户端输入“exit”,传送到服务器端,服务器端程序退出,不向客户端送回任何信息;上述三种情况之外的其它情况,从客户端输入的内容经服务器后均原样送回客户端。(本题满分15分)

//参考程序

//socket_server.c

#include

#include

#include

#include

#include #include

#include

#include

#define SERVPORT 3333

#define BACKLOG 9

main()

{

int sockfd,client_fd;

int sin_size;

int recvbytes;

struct sockaddr_in my_addr;

struct sockaddr_in remote_addr;

char buf[100];

if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)

{

perror("socket creation error");

exit(1);

}

my__family=AF_INET;

my__port=htons(SERVPORT);

my__addr.s_addr = INADDR_ANY;

bzero(&(my__zero),8);

if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) {

perror("bind error");

exit(1);

}

if(listen(sockfd, BACKLOG) == -1)

{

perror("listen error");

exit(1);

}

while(1)

{

sin_size = sizeof(struct sockaddr_in);

if ((client_fd = accept(sockfd, (struct sockaddr *)&remote_addr, &sin_size)) == -1)

{

perror("accept error");

continue;

}

printf("received a connection from %sn", inet_ntoa(remote__addr));

memset(buf,'0',sizeof(buf)); recvbytes=recv(client_fd,buf,sizeof(buf),0);

printf("the recvbytes is:%dn",recvbytes);

if(recvbytes == -1)

{

perror("recv error!");

exit(0);

}

printf("Received msg is:%sn",buf);

if(strncmp(buf,"Hello,Server",sizeof("Hello,Server"))==0)

{

memcpy(buf,"Hello,Client",sizeof("Hello,Client"));

}

if(strncmp(buf,"Hello,ABC",sizeof("Hello,ABC"))==0)

{

memcpy(buf,"Hello,abc",sizeof("Hello,abc"));

}

if(strncmp(buf,"exit",strlen("exit"))==0)

{

printf("the server program will exit.n");

close(client_fd);

exit(0);

}

printf("the msg to be sent is:%sn",buf);

if(send(client_fd, buf, strlen(buf), 0) == -1)

perror("send error");

}

}

//socket_client.c

#include

#include

#include

#include

#include

#include

#include

#include

#define SERVPORT 3333

#define SERVPORT1 8888

#define MAXDATASIZE 90

main(int argc, char *argv[]) {

int sockfd, recvbytes,sendbytes,client_fd;

char buf[MAXDATASIZE];

struct hostent *host;

struct sockaddr_in serv_addr;

struct sockaddr_in my_addr;

if (argc < 3)

{

fprintf(stderr,"Please enter the server's hostname and the msg to be sent!n");

exit(1);

}

if((host=gethostbyname(argv[1]))==NULL)

{

herror("gethostbyname error");

exit(1);

}

if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)

{

perror("socket creation error!");

exit(1);

}

serv__family=AF_INET;

serv__port=htons(SERVPORT);

serv__addr = *((struct in_addr *)host->h_addr);

bzero(&(serv__zero),8);

if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1)

{

perror("connect error");

exit(1);

}

printf("the msg to be sent is:%sn",argv[2]);

sendbytes=send(sockfd,argv[2],strlen(argv[2]),0);

if(sendbytes==-1)

perror("send error");

memset(buf,'0',sizeof(buf));

if ((recvbytes=recv(sockfd, buf, MAXDATASIZE, 0)) ==-1)

{

perror("recv error");

exit(1); }

printf("Received: %sn",buf);

close(sockfd);

}