实验要求
- 客户端输入“quit”,客户端程序与服务器端程序打印退出信息,终止程序的执行;
- 客户输入命令,客户端将命令通过流套接字发送给客户端,服务器执行收到的命令,并将结果发送到客户端显示;
- 如果没有客户输入的命令,服务器发送命令非法信息,并在客户端显示该条信息;
- 服务器端可以接收客户端多次连接,能够处理客户端非正常退出。
实验环境
Red hat 9
代码
tcpserver.c
#include<stdio.h>
#include<unistd.h>
#include<sys/socket.h>
#include<string.h>
#include<netdb.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#define PORT 8900
#define BUF_SIZE 2048
int execute(char* command,char* buf);
int main()
{
int sockfd;
struct sockaddr_in client;
struct sockaddr_in server;
char send_buf[BUF_SIZE];
char recv_buf[BUF_SIZE];
char cmd[2048];
int sendnum;
int recvnum;
int length;
int port;
int connected; //change
memset(send_buf,0,2048);
memset(recv_buf,0,2048);
memset(cmd,0,2048); //change
port = PORT;
if (-1==(sockfd=socket(AF_INET,SOCK_STREAM,0))) //change
{
perror("generating socket error\n");
exit(1);
}
memset(&server,0,sizeof(struct sockaddr_in));
server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl(INADDR_ANY);
server.sin_port = htons(port);
if (-1==bind(sockfd,(struct sockaddr*)&server,sizeof(struct sockaddr)))
{
perror("binding error\n");
close(sockfd);
exit(1);