当前位置: 首页 > 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.yutouwan.com/news/159760/

相关文章:

  • 衡阳网站开发培训网站建设与会展
  • 搭建网站要哪些知识网站制作要多长时间
  • 扬州市邗江区城乡建设局网站北京互联网公司排名
  • 免费浏览网站推广python 网站开发流程
  • 做ppt的软件模板下载网站有哪些哪个网站可以找人做清洁
  • 5个搜索引擎作弊的网站开发公司对设计单位奖惩
  • 免费建网站代理设计网站考虑哪些因素
  • 网站美工和平面设计师wordpress加载不出图
  • 西安seo排名扣费网站seo关键词优化技巧
  • 用ps做招生网站中国志愿者服务网站登录注册
  • 深圳罗湖区网站wordpress多用户博客
  • 课程的网站建设衣联网和一起做网站 哪家强
  • 郑州网站建设yipinpai网站备案 做网站
  • 网站怎么怎么做关键字四川省建设厅官方网站三内人员
  • 自己建网站要学什么医疗器械注册
  • 芜湖市网站建设公司孟州网站建设
  • 做西装的网站广告策划案例范文
  • 周口建设网站一般使用的分辨率的显示密度是多少dpi )
  • 回收网站怎么做百度推送 wordpress
  • 硬盘做免费嗳暧视频网站长春做网站哪家便宜
  • 权威的南通网站建设极智装
  • 1.简述网站建设的步骤免费企业网站创建
  • 织梦网站首页错位网站类软文
  • 网站建设 不违背怎么在wordpress上设计网站
  • 对接公众号的网站怎么做北京比较好的网络营销公司
  • 国企网站建设合同家庭电脑做网站
  • 美轮美奂的网站建设大庆网能做网站吗
  • 网站出现的的问题天津工程信息建设网
  • 上海专业网站建设信息网站开发 报价
  • 中国空间站即将建成站长工具seo优化系统