设为首页 加入收藏

TOP

Telnet模拟系统(Linux c)(五)
2019-01-25 12:08:36 】 浏览:504
Tags:Telnet 模拟 系统 Linux
ME; //默认为USERNAME,即用户名输入模式 int client_size; int recv_bits; char buffer[ BUF_SIZE ]; pid_t pid; struct sockaddr_in client_addr, server_addr; client_size = sizeof( struct sockaddr_in ); /* 初始化各变量为零 */ memset( buffer, 0, BUF_SIZE ); memset( &server_addr, 0, sizeof(server_addr) ); memset( &client_addr, 0, sizeof(server_addr) ); if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) //创建socket printf( "socket failed" ); /* 设置端口快速重用*/ optval = 1; if ( setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (void *)&optval, sizeof(int)) < 0 ) printf( "setsockopt failed" ); server_addr.sin_family = AF_INET; server_addr.sin_port = htons( PORT ); server_addr.sin_addr.s_addr = htonl( INADDR_ANY ); if ( bind(sockfd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr_in)) < 0 ) //绑定ip和端口号 printf( "bind failed" ); if ( listen(sockfd, MAX_LISTEN) < 0 ) //建立监听 printf( "listen failed" ); printf("telnet服务器已开启……\n"); while ( 1 ) { if ( (connfd = accept(sockfd, (struct sockaddr*)&client_addr, &client_size)) < 0 ) //响应客户端请求 printf( "accept failed" ); printf( "Server accept a client: ip = %s\n",inet_ntoa(client_addr.sin_addr) ); //打印客户端ip /* 创建子进程处理客户端请求 */ if ( (pid = fork()) == 0 ) { while ( 1 ) { /* 接受客户端信息 */ if ( (recv_bits = recv(connfd, buffer, BUF_SIZE, 0)) < 0 ) printf( "recv failed" ); /* 去除最后一个字符 */ buffer[recv_bits - 1] = '\0'; /* 用户名鉴定 */ if ( recv_type == USERNAME ) { if ( strcmp(name, buffer) != 0 ) { if ( send(connfd, error_user,strlen(error_user), 0) < 0 ) printf( "send failed" ); break; }else{ if ( send(connfd, correct_user,strlen(correct_user), 0) < 0 ) printf( "send failed" ); } printf("%s正在登录:",buffer); recv_type = PASSWORD; //设置标志为密码鉴定模式 } /* 密码鉴定 */ else if ( recv_type == PASSWORD ) { if ( strcmp(passwd, buffer) != 0 ) { //验证密码 if ( send(connfd, error_password,strlen(error_password), 0) < 0 ) printf( "send failed" ); } else { if ( send(connfd, success_login, strlen(success_login), 0) < 0 ) printf( "send failed" ); printf("用户登录成功!\n"); recv_type = COMMAND; //设置标志为命令模式 } } /* 命令模式 */ else if( recv_type == COMMAND ) { command(connfd,buffer); puts("客户端输入的命令为:"); puts(buffer); } } close( sockfd ); close( connfd ); exit ( 0 ); } else close( connfd ); } return 0; }

 

7.2客户端

#include <unistd.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <assert.h>

#include <errno.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <arpa/inet.h>

#include <netinet/in.h>

 

 

#define TRUE        1

#define FALSE       -1

#define BUF_SIZE     1024

 

//登录过程状态标识

char *error_user = "error user name";

char *error_password = "error password";

char *correct_user = "correct user";

char *success_login = "correct password";

char *exit_command = "exit";

char *exit_tip="退出连接!";

 

/*

* 介绍:客户端

* 功能:

*    1.登录服务器端

*    2.登录后在服务器端对文件进行操作

*/

 

 

int send_recv( int connfd,char flag )

{

 /*

     *  作用:客户端与服务器端信息的处理

     *  connfd: 服务器端标识

 *  flag: 输入
首页 上一页 2 3 4 5 6 下一页 尾页 5/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇c语言----<项目>_小游戏<.. 下一篇C语言实现邻接矩阵创建无向图&图..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目