原创 第三部分(1)-使用高速SPI以太网控制芯片W5200登录Telnet服务器

2012-1-13 13:04 1293 6 6 分类: MCU/ 嵌入式

最近我们给大家介绍了很多Telnet服务器的知识,在您尽情享受Telnet所带给您的便捷的同时相信您已经对Telnet了解不少了,您有什么意见和学习心得吗?大家一起讨论吧。今天我将继续为大家献上我的一点学习心得,给出一些基于IAR编译器的代码例子,希望对您有用。

4执行代码

这个部分将复习加载在W5200E01-M3远程服务器的示例代码。更多有关基于用TCP实现远程信息交换的细节,请查阅“How to implement TCP for W7100”文档。这个部分将进一步解释在main()功能中的TELNETS的功能;但对与MCU初始化和网络初始化的代码不做解释。

4.1 TELNETS()功能

TELNETS()功能是执行远程服务器的基本功能,并且它是基于TCP来建立的SOCKET和等待客户机的连接。在于客户机建立连接之后,调用init_telopt()来选择远程登录方式。为了进入命令模式,需要调用tel_input()。下一小节将进一步说明init_telopt()和tel_input()的作用。远程服务使用socket可以从0到7。但端口号必须设置为23,因为根据远程服务标准,远程服务的专用端口号为23。

1.jpg
1.1.jpg

4.2 Init_telopt()和sendlAC()功能

Init_telop()是用来决定远程服务器与客户机之间的选择方式。由于在测试程序中是有ECHO选项,所以用户只能用WILL命令来设置ECHO选项。正如在第二部分中所解释到的那样,当发送一个控制字符时,IAC(0xFF)也必须要一起发送。SendlAC()是用于发送IAC和控制字符的。

2.jpg
2.1.jpg

 

4.3 Tel_input()的功能

Tel_input()是用来处理在远程终端命令的功能。对于每一条指令和处理方式,请参考Table 3.1。

 

3.jpg

 

3.1.jpg

 

3.2.jpg
3.3.jpg

4.4 Logic()功能

当用户登录远程服务器时,Logic()是用来检查用户ID信息和密码。如果所输入的信息和已有的登录信息相比配的话,用户将成功连接到远程服务器。但是,如果与登录信息不相同,则会要求用户重新输入ID和密码。

uint8 telnet_ID[] = {
      "wiznet"

};

uint8 telnet_PW[] = {

"0000"

};

void login(SOCKET s)
{

if(user_state == USERNAME) {           /* input the client ID and Password */

strcpy((char *)user_name, data_buf);
sprintf(buf, "Password : ");

send(s, (uint8 const *)buf, strlen(buf), FALSE);
user_state = PASSWORD;

return;

} else if(user_state == PASSWORD) {

strcpy((char *)user_password, data_buf);

 

 

/*Check the client ID and Password*/

if(!(strcmp((char const *)user_name, (char const *)telnet_ID)) && !(strcmp((char const

*)user_password, (char const *)telnet_PW))) {

sprintf(buf, "\r\n=======================");

send(s, (uint8 const *)buf, strlen(buf), FALSE);

sprintf(buf, "\r\nSuccessfully connected!\

\r\nImplemented Commands : HELP, GET LED, LED3 ON/OFF, LED4 ON/OFF, EXIT\r\n"); send(s, (uint8 const *)buf, strlen(buf), FALSE);

sprintf(buf, "=======================\r\n"); send(s, (uint8 const *)buf, strlen(buf), FALSE); user_state = LOGIN;

return;

} else {

/* If the ID or Password incorrect, print error msg */

sprintf(buf, "\r\nID or Password incorrect!\r\n"); send(s, (uint8 const *)buf, strlen(buf), FALSE); sprintf(buf, "ID : ");

send(s, (uint8 const *)buf, strlen(buf), FALSE); user_state = USERNAME;

return;

}

}

}        /* End login function */

 

由于篇幅的限制,我们将本部分分为两节给大家讲解,相关第二部分请参照:

http://bbs.ednchina.com/BLOG_ARTICLE_3001249.HTM

如果您有什么疑问请留言或者来信:wiznetbj@wiznettechnology.com,

Tel: 86-10-84539974(转166)或者登陆我们的网站: http://www.wiznet.co.kr/
希望本篇文章可以给您带来帮助,谢谢。

 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条