當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 在上兩篇博文(如何使用W7100A實(shí)現(xiàn)Telnet服務(wù)器(一)、如何使用W7100A實(shí)現(xiàn)Telnet服務(wù)器(二))里我們簡(jiǎn)單地介紹一下Telnet,第三章將會(huì)演示Telnet函數(shù)的具體功能,第四章將涉及到代碼的分析。這篇文檔

在上兩篇博文(如何使用W7100A實(shí)現(xiàn)Telnet服務(wù)器(一)、如何使用W7100A實(shí)現(xiàn)Telnet服務(wù)器(二))里我們簡(jiǎn)單地介紹一下Telnet,第三章將會(huì)演示Telnet函數(shù)的具體功能,第四章將涉及到代碼的分析。這篇文檔中所有的示例代碼都是基于Keil uVision3。

第一篇在這里:http://blog.csdn.net/wiznet2012/article/details/7721006

第二篇在這里:http://blog.csdn.net/wiznet2012/article/details/7728408

下面我們介紹第三部分(主要內(nèi)容是第四章的余下的代碼分析部分):

4.3 tel_input()函數(shù)

tel_input()函數(shù)用來處理Telnet終端機(jī)內(nèi)的輸入命令。具體每一個(gè)命令以及處理方法請(qǐng)參考表3.1。

void tel_input(SOCKET s)

{

uint8 xdata c;

while(1){

if((getSn_RX_RSR(s)) == 0) break; /*如果沒有接收到的數(shù)據(jù),斷開*/

if(recv(s, &c, 1) == 0) break; /*如果接收到的數(shù)據(jù)為0,斷開*/

if(user_state == LOGOUT) break; /*如果用戶的聲明是LOGOUT, 斷開*/

if(c != IAC){ /*如果接收到的數(shù)據(jù)不是控制字符*/

data_buf[buf_index++] = c; /*保存接收到的數(shù)據(jù)到data_buf*/

putchar(c);

if(user_state == LOGOUT) break;

if(user_state != PASSWORD){

sprintf(buf, "%c", c);

send(s, buf, strlen(buf));

}

if(c == 'n'){ /*如果接收到一個(gè)n’ ASCII 代碼*/

if(buf_index > 1){

if(data_buf[buf_index-2] == 'r') data_buf[buf_index-2] = '