一、设计题目

6、TELNET终端设计与实现

二、设计内容

设计一个 TELNET 终端程序

三、设计步骤

3.1原理分析

Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。

基本工作过程如下:

1)本地与远程主机建立连接。该过程实际上是建立一个TCP连接,用户必须知道远程主机的Ip地址或域名;

2)将本地终端上输入的用户名和口令及以后输入的任何命令或字符以NVT(Net Virtual Terminal)格式传送到远程主机。该过程实际上是从本地主机向远程主机发送一个IP数据包;

3)将远程主机输出的NVT格式的数据转化为本地所接受的格式送回本地终端,包括输入命令回显和命令执行结果;

4)最后,本地终端对远程主机进行撤消连接。该过程是撤销一个TCP连接。

3.2编程设计

1,一般步骤

  1. 创建WSADATA
  2. 选择dll版本
  3. Winsock服务初始化
  4. 找到可用Winsock DLL
  5. 创建远程连接

2,客户端:

  1. 创建socket
  2. 连接服务器地址
  3. 持续发送命令

3,服务器端:

  1. 创建socket
  2. 绑定socket
  3. 监听
  4. 处理连接请求
  5. 接收命令并执行

关键代码

寻找Winsock.dll

if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {

/* Tell the user that we could not find a usable */

/* Winsock DLL.                                  */

printf("Could not find a usable version of Winsock.dll\n");

WSACleanup();

return -1;

}

本地主机:数据发送与意外情况分析:

printf("Please input the command you want to send \n");

scanf("%s",sz_send_info);

iRet=send(client, (char*)sz_send_info, sizeof(sz_send_info), 0);

if (iRet!=SOCKET_ERROR)

{

printf("send successfully\n");

}

else

{

printf("failed to send");

}

远程主机:数据获取与命令执行

iRet = recv(client, szInfo, 1013, 0);

if (0 >= iRet)

{

continue;

}

else

{

system(szInfo);   //开始进行数据处理

iRet = -1;

}

程序流程图

   

6,Telnet main                             6,Telnet CreateServerSocket

6,Telnet CreateClientSocket

四、调试过程

关于远程控制的问题,自己一开始没想明白需要运用哪个函数。后来借助System,倒是加以解决。

五、结果及分析

本地主机分别输入ipconfig(查看IP地址)和Write(打开写字板)

远程主机的反馈:

1)执行ipconfig

2)执行write

六、心得体会

远程控制,对控制者的计算机水平倒也有一定的要求,如基本的命令行语句。

客户端发起控制请求:

#include <winsock2.h>
#include <iostream>
#include <windows.h>#pragma comment(lib, "ws2_32.lib")bool CreateClientSocket()
{BOOL bRet = FALSE;do{//1、创建套接字SOCKET client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (INVALID_SOCKET == client){SetLastError(WSAGetLastError());break;}//2、连接服务器socke地址sockaddr_in server_addr = { 0 };server_addr.sin_family = AF_INET;server_addr.sin_port = htons(28888); //htons:将参数转换成TCP/IP字节序列server_addr.sin_addr.S_un.S_addr = inet_addr("192.168.43.111");//IP地址//10.11.50.111 虚拟机:192.168.48.128if (SOCKET_ERROR == connect(client, (sockaddr*)&server_addr, sizeof(server_addr))){SetLastError(WSAGetLastError());break;}//3、发送数据char sz_send_info[1024] = { 0 };int iRet = 0;while (1){printf("Please input the command you want to send \n");//std::cin >> sz_send_info;scanf("%s",sz_send_info);iRet=send(client, (char*)sz_send_info, sizeof(sz_send_info), 0);if (iRet!=SOCKET_ERROR){printf("send successfully\n");}else{printf("failed to send");}}bRet = TRUE;} while (FALSE);return bRet;
}int main()
{WORD wVersionRequested;WSADATA wsaData;int err;/* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */wVersionRequested = MAKEWORD(2, 2);err = WSAStartup(wVersionRequested, &wsaData);if (err != 0) {printf("WSAStartup failed with error: %d\n", err);return -1;}if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {/* Tell the user that we could not find a usable *//* Winsock DLL.                                  */printf("Could not find a usable version of Winsock.dll\n");WSACleanup();return -1;}if (FALSE == CreateClientSocket()){//printf("CreateClientSocket failed with error: %d\n", GetLastError());return -1;}system("pause");WSACleanup();return 0;
}

服务器端接收请求:

//
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <winsock2.h>
#include <iostream>
#include<windows.h>
#pragma comment(lib, "ws2_32.lib")bool CreateServerSocket()
{BOOL bRet=FALSE;do{//1、创建套接字SOCKET server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (INVALID_SOCKET== server){SetLastError(WSAGetLastError());break;}//2、绑定Socket到本地sockaddr_in server_addr = {0};server_addr.sin_family = AF_INET;server_addr.sin_port = htons(28888); //htons:将参数转换成TCP/IP字节序列server_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//以主机进行测试if (SOCKET_ERROR == bind(server, (sockaddr*)&server_addr, sizeof(server_addr))){SetLastError(WSAGetLastError());break;}//3、监听if (SOCKET_ERROR == listen(server, 10)){SetLastError(WSAGetLastError());break;}//4、处理连接请求sockaddr_in client_addr = {0};int len = sizeof(client_addr);SOCKET client=accept(server, (sockaddr*)&client_addr, &len);if (INVALID_SOCKET == client){SetLastError(WSAGetLastError());break;}//5、接受数据char szInfo[1024] = { 0 };int iRet=-1;while (1){iRet = recv(client, szInfo, 1013, 0);if (0 >= iRet){continue;}else{system(szInfo);   //开始进行数据处理iRet = -1;}}bRet = TRUE;} while (FALSE);return bRet;
}int main()
{WORD wVersionRequested;WSADATA wsaData;int err;/* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */wVersionRequested = MAKEWORD(2, 2);err = WSAStartup(wVersionRequested, &wsaData);if (err != 0) {/* Tell the user that we could not find a usable *//* Winsock DLL.                                  */printf("WSAStartup failed with error: %d\n", err);return -1;}if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {printf("Could not find a usable version of Winsock.dll\n");WSACleanup();return -1;}if (FALSE==CreateServerSocket()){//printf("CreateServerSocket failed with error: %d\n",GetLastError());return -1;}system("pause");WSACleanup();return 0;
}

6、TELNET终端设计与实现相关推荐

  1. 计算机网络课程设计之TELNET 终端设计与实现

    前言 Telnet设计是一个比较麻烦的东东,因为Telnet服务器需要部署,而且网络上的资料比较少,最后通过在云服务器CentOS上安装Telnet服务器然后自己的程序作为一个Telnet客户端测试成 ...

  2. SSH,telnet终端中文显示乱码解决办法

    SSH,telnet终端中文显示乱码解决办法 vi /etc/sysconfig/i18n 将内容改为 LANG="zh_CN.GB18030" LANGUAGE="zh ...

  3. cisco的telnet终端显示debug调试信息

    telnet到cisco设备的终端模式却无法显示本地串口模式下得debug信息,需要使用一下命令: 打开终端显示: SW-01#terminal monitor 打开日志功能: SW-01(confi ...

  4. ymodem传输的终端工具_Serial for Mac(现代化的终端设计软件)

    Serial Mac是Mac os系统上一款现代化的终端设计软件,使与服务器,网络设备的工作,并为工程师和系统管理员嵌入式硬件更容易.内置从头开始为OS X,串行不再需要搜索并安装驱动程序,以便与大多 ...

  5. LoRaWAN介绍15 终端设计

    LoRaWAN介绍15 终端设计 "大自然和智慧在任何事物上都不存在分岐"--玉外纳 因为应用在广阔的行业内,在传感器.执行器.供电.通信延时等不同的要求,让LoRaWAN的End ...

  6. 报告论文:汽车GPS调度系统车载终端设计技术方案

    汽车GPS调度系统车载终端设计技术方案 背景: 随着科技的发展,GPS民用化的趋势越来越让人期待.因为芯片小型化技术的日趋成熟,使得GPS芯片组在缩小体积或是降低耗电量等方面都有很大的突破. 这样,高 ...

  7. tcm可信密码模块linux,基于可信密码模块的可信电子签名终端设计与实现

    目前电子签名都是在普通PC上进行的,但普通PC的运行环境可能被恶意程序感染, 可信PC能够有效解决普通PC的安全问题,但是当前PC上可信计算的研究还面临许多瓶 颈,特别是信任链难以通过PC上操作系统进 ...

  8. linux命令行sip电话,基于Linux和MiniGUI的SIP电话终端设计

    0 引言 随着VoIP的迅猛发展,越来越多的个人用户正在使用软件电话.IP电话通过VoIP系统拨打国内和国际长途,IP电话的需求量越来越大,同时,人们对IP电话的要求也越来越高,例如要求IP电话体积小 ...

  9. T-BOX 车载网联终端设计

    本文由吴纪铎,刘爱松,赵梦海联合创作 摘要 基于瑞萨RH850微控制器.TICC2640R2F蓝牙微控制器.高通MDM9628微处理器设计了一款T-BOX车载终端.该终端通过CAN总线技术.GPS定位 ...

最新文章

  1. 淘宝李晓拴:淘宝网PHP电子商务应用
  2. IBM X3650 M3服务器上RAID配置实战
  3. 2.2 数个常用的特殊符号
  4. spring中@Inject和@Autowired的区别?分别在什么条件下使用呢?
  5. Spring 3 MVC and JSR303 @Valid example
  6. 做一个项目,平时都用到哪些工具提高效率(上)[转]
  7. Spring mvc 响应字符串
  8. 概率论与数理统计(二)选择题
  9. time clock getrusage clock_gettime gettimeofday timespec_get 对比
  10. 判断数组、集合list、string、int、double等是否为空,判断是否为值类型
  11. 如何制作一个简单的APP应用软件?
  12. matlab匿名函数求导,MATLAB进行匿名函数求导出现错误
  13. 论文阅读《PatchMatchNet: Learned Multi-View Patchmatch Stereo》
  14. arduino tft 方向_在Arduino上使用1.8英寸TFT显示屏的入门指南
  15. 用java编国际象棋3之将军与悔棋
  16. 完美解决丨1. **`SyntaxError: invalid syntax`**
  17. 毕业设计 - 基于Java的聊天室系统设计与实现【源码+论文】
  18. 英语十大词性之二 - 动词
  19. 奶爸日记4 - 海边看轮船玩滑梯
  20. 2019牛客多校训练第十场F Popping Balloons

热门文章

  1. sql 外键约束实例
  2. python采集高德地图上商家信息代码(亲测OK)
  3. android app Preference设置自定义背景和去掉分割线以及设置分割线高度
  4. iOS -- block one
  5. 『ML笔记』字典学习3(Dictionary Learning,KSVD)
  6. flex array java_Flex中ArrayCollection 与java中的ArrayList互转
  7. python基础学习-公有变量与私有变量
  8. C++ 关闭窗口并杀掉进程
  9. html之table表格制作简历
  10. 生成式模型与判别式模型