当前位置: 首页 > news >正文

海口建设网站的公司哪家好网站服务器有哪些类型

海口建设网站的公司哪家好,网站服务器有哪些类型,天津网站制作企业,重庆网页优化seo前面我们已经实现了基于RAW API的TCP服务器和客户端#xff0c;也在此基础上实现了HTTP应用。接下来我们实现一个基于TCP的Telnet服务器应用。 1、Telnet协议简介 Telnet协议是TCP/IP协议族中的一员#xff0c;是Internet远程登陆服务的标准协议和主要方式。它为用户提供了…前面我们已经实现了基于RAW API的TCP服务器和客户端也在此基础上实现了HTTP应用。接下来我们实现一个基于TCP的Telnet服务器应用。 1、Telnet协议简介 Telnet协议是TCP/IP协议族中的一员是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序用它连接到服务器。终端使用者可以在telnet程序中输入命令这些命令会在服务器上运行就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。 Telnet是位于OSI模型的第7层---应用层上的一种协议是一个通过创建虚拟终端提供连接到远程主机终端仿真的TCP/IP协议。这一协议需要通过用户名和口令进行认证是Internet远程登陆服务的标准协议。应用Telnet协议能够把本地用户所使用的计算机变成远程主机系统的一个终端。它提供了三种基本服务 Telnet定义一个网络虚拟终端为远程系统提供一个标准接口。客户机程序不必详细了解远程系统他们只需构造使用标准接口的程序Telnet包括一个允许客户机和服务器协商选项的机制而且它还提供一组标准选项 .Telnet对称处理连接的两端即Telnet不强迫客户机从键盘输入也不强迫客户机在屏幕上显示输出。 2、TELNET服务器的设计 Telnet是一种基于TCP实现的远程登录方式Telnet协议也分配有固定端口23在这里我们就是用这一端口来实现一个Telnet服务器。这个服务器可以提供给多个客户端访问。 我们要实现的这个Telnet服务器是比较简单的一个设计。当客户端成功链接到服务器后服务器就会提示用户登录成功登陆后就可以向服务器发送命令当发送不同的命令时服务器给出不同的响应。具体的操作流程设计如下 从上面的流程图看其实我们设计的Telnet服务器功能已经非常明确了。但有两点需要描述一下。首先是关于连接状态的设定在这里我们只是简单的将状态定义为两种已登录和未登录。如果已登录则按命令交互来解析。如果未登录则按登录密码来解析。 另一方面为了实现命令交互我们需要为Telnet服务器设定命令。我们简单的设定6种命令hello、date、time、version、quit与help等命令。事实上我们实现Telnet服务器主要就是处理如何接收和响应这些命令。 3、TELNET服务器的实现 我们已经设计了Telnet服务器的基本功能。接下来就是如何实现它了。我们已经有前面实现TCP服务器的基础。所以实现他的重点就是我们设计的Telnet服务器了。 我们依然采用实现普通TCP服务器结构来实现Telnet服务器只是在信息处理回调函数上更复杂一点。还有就是端口方面我们采用Telnet的惯用端口。首先必然是Telnet服务器的初始化。 /* TELNET服务器初始化配置*/ void Telnet_Server_Initialization(void) {struct tcp_pcb *pcb;                            /* 生成一个新的TCP控制块 */pcb tcp_new();                                   /* 控制块邦定到本地IP和对应端口 */tcp_bind(pcb, IP_ADDR_ANY, TCP_TELNET_SERVER_PORT);      /* 服务器进入侦听状态 */pcb tcp_listen(pcb);                       /* 注册服务器accept回调函数 */tcp_accept(pcb, TelnetServerAccept);                                        } 其实初始化部分就是我们已经熟悉的TCP服务器的初始化只是使用了Telnet的惯用端口。接下来就是实现在初始化中注册的Telnet服务器接收回调函数。该函数为tcp_accept_fn类型注册到了监听控制块的accept字段。在服务器上有新连接建立时就会被内核调用。 /* TELNET接收回调函数客户端建立连接后本函数被调用 */ static err_t TelnetServerAccept(void *arg, struct tcp_pcb *pcb, err_t err) {    u32_t remote_ip;char linkInfo [100];u8_t iptab[4];telnet_conn_arg *conn_arg NULL;remote_ip pcb-remote_ip.addr;iptab[0] (u8_t)(remote_ip 24);iptab[1] (u8_t)(remote_ip 16);iptab[2] (u8_t)(remote_ip 8);iptab[3] (u8_t)(remote_ip);//生成登录提示信息sprintf(linkInfo, Welcome to Telnet! your IP:Port -- [%d.%d.%d.%d:%d]\r\n, \iptab[3], iptab[2], iptab[1], iptab[0], pcb-remote_port);  conn_arg mem_calloc(sizeof(telnet_conn_arg), 1);if(!conn_arg){return ERR_MEM;}conn_arg-state TELNET_SETUP;conn_arg-client_port pcb-remote_port;conn_arg-bytes_len 0;memset(conn_arg-bytes, 0, MAX_MSG_SIZE);tcp_arg(pcb, conn_arg);/* 注册Telnet服务器连接错误回调函数 */tcp_err(pcb, TelnetServeConnectError);/* 注册Telnet服务器消息处理回调函数*/tcp_recv(pcb, TelnetServerCallback);/* 连接成功发送登录提示信息 */ tcp_write(pcb, linkInfo, strlen(linkInfo), 1);tcp_write(pcb, LOGIN_INFO, strlen(LOGIN_INFO), 1);return ERR_OK; } 在这个函数中我们实现的功能主要是三方面注册Telnet服务器消息处理回调函数注册Telnet服务器连接错误回调函数初始化Telnet服务器的状态。这个初始化是在连接建立后Telnet服务器与客户端的交互初始化比如登录状态用户提示等。 在上面的函数中我们注册了两个回调函数接下来必然就是实现这两个函数。我们先来实现Telnet服务器信息处理回调函数。这个函数其实就是我们前面注册过的TCP服务器数据接收处理函数。这个函数是tcp_recv_fn类型。这是使用RAW API实现TCP服务器最重要的函数因为我们实现的TCP服务器究竟有什么功能完全依赖于这个函数及其所调用的函数。 /* TELNET服务器信息处理回调函数在有消息需要处理时调用此函数 */ static err_t TelnetServerCallback(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) {telnet_conn_arg *conn_args (telnet_conn_arg *)arg;char sndbuf[50];int strlen 0;int ret 0;if(NULL conn_args || pcb-remote_port ! conn_args-client_port){if(p! NULL){pbuf_free(p);}return ERR_ARG;}if (p ! NULL){       /* 更新接收窗口 */tcp_recved(pcb, p-tot_len);ret TelnetCommandInput(pcb, conn_args, p);if(ret 1)//是完整命令{switch(conn_args-state){case TELNET_SETUP:{if(strcmp(conn_args-bytes,PASSWORD) 0)//密码正确{strlen sprintf(sndbuf,##Hello! This is an LwIP-based Telnet Server##\r\n);tcp_write(pcb, sndbuf, strlen,TCP_WRITE_FLAG_COPY);strlen sprintf(sndbuf,##Created by Moonan...                      ##\r\n);tcp_write(pcb, sndbuf, strlen,TCP_WRITE_FLAG_COPY);strlen sprintf(sndbuf,##Enter help for help.  Enter quit for quit.##\r\n);tcp_write(pcb, sndbuf, strlen,TCP_WRITE_FLAG_COPY);strlen sprintf(sndbuf,LwIP Telnet);tcp_write(pcb,sndbuf,strlen, 1);conn_args-state TELNET_CONNECTED;//转换状态}else//密码错误提示重新登录{strlen sprintf(sndbuf,##PASSWORD ERROR! Try again:##\r\n);tcp_write(pcb, sndbuf, strlen,TCP_WRITE_FLAG_COPY);}memset(conn_args-bytes, 0, MAX_MSG_SIZE);conn_args-bytes_len 0;break;}case TELNET_CONNECTED:{if(TelnetCommandParse(pcb, conn_args-bytes) 0){memset(conn_args-bytes, 0, MAX_MSG_SIZE);conn_args-bytes_len 0;}else{/* 服务器关闭连接 */ServerCloseTelnetConnection(pcb);}break;}default:{break;}}}pbuf_free(p);} else if (err ERR_OK){/* 服务器关闭连接 */ServerCloseTelnetConnection(pcb);}return ERR_OK;} 在这个函数中我们实现了Telnet服务器的各种功能如登录验证命令检查命令响应等。已经具备一个Telnet服务器的基本框架。接下来还要实现Telnet连接错误回调函数。这个函数是tcp_err_fn类型在这个程序中主要完成连接异常结束时的一些处理可以释放一些必要的资源。在这个函数被内核调用时连接实际上已经断开相关控制块也已经被删除。所以在这个函数中我们可以重新初始化连接及其资源。 /* TELNET连接错误回调函数连接故障时调用本函数 */ static void TelnetServeConnectError(void *arg, err_t err) {Telnet_Server_Initialization(); } 至此我们就实现了一个简单的Telnet服务器当然它只是一个雏形需要开发更复杂的功能则需要修改这几个回调函数。 4、TELNET服务器总结 我们已经实现了一个简单的Telnet服务器。当然我们的目的主要是以此来学习基于LwIP的复杂的TCP应用。事实上理解了TCP服务器的实现机制诸如此类基于TCP的高级应用协议并不是特别复杂的事情。 欢迎关注
http://www.huolong8.cn/news/159760/

相关文章:

  • 做跨国婚恋网站赚钱吗nian.so是国外还是国内网站
  • 福清市建设局网站多少献县网站建设公司
  • 广东网站备案系统企业建网站能不能一次进费用
  • 整容网站模板如何创建电商平台
  • wordpress免费网站国外厦门网站建设厦门seo
  • 网站建设与企业发展怎么学做电商然后自己创业
  • 天津免费建站wordpress微信公众号关注
  • 建设创意网站常见的网站空间服务商
  • 网站开发方面知识开家网站建设培训
  • 网站建设还能赚钱吗国家信息公示网
  • 好商网的网站可以做中英文切换吗凡科建站免费版可以做什么
  • 网站建设与设计实验报告中国建设银行网站密码是什么意思
  • 网站多语言 设计网站搜索功能怎么做
  • 太原seo网站建设上海公司网站备案
  • 学院门户网站建设汕头人口
  • 电子商务网站的主题及建设目标微网站设计制作
  • 四川省城乡与建设厅网站首页淘宝直通车推广怎么收费
  • 中国建设银行演示网站外贸网站建设外
  • 看一个网站是用什么语言做的群晖 wordpress是什么
  • 网站功能模块有哪些深圳电商页面设计那家好
  • 站酷设计官方网站网站开发宝典
  • 安徽省建设监理有限公司网站自己制作app的应用程序
  • 重庆网站建设网站建设建立一个公司
  • 浏阳网站建设tvshown国外h5建站
  • linux建立网站南京网站开发选南京乐识赞
  • 织梦建设网站全过程三河建设厅公示网站
  • 做宣传图片用什么网站宣传片拍摄流程
  • 自己开发网站需要多少钱简易手机app制作教程
  • wordpress注册页岳阳优化营商环境
  • 宁波市网站建设专做展厅设计网站