荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: cooler (星光璀璨心依然), 信区: Program
标 题: [转载] [转寄] 原码重读(2)--autopost xh
发信站: BBS 荔园晨风站 (Thu Mar 23 15:52:43 2000), 转信
【 以下文字转载自 cooler 的信箱 】
【 原文由 cooler.bbs@melon.gznet.edu.cn 所发表 】
发信人: xh (爱我--很累), 信区: Socket
标 题: 原码重读(2)--autopost
发信站: 华南网木棉站 (Sun Nov 14 22:47:03 1999), 转信
整个程序结构比较简单,不想罗嗦了,这里只讲它的精华:waitstring的协商部分
,使用这段代码,就能完成最头痛的协商,然后就可以随心所欲的编写自己的telnet应用
了。阅读时请参考精华区->Socket编程之绝学篇->telnet编程中的telnet基本过程.
这里再罗嗦一下一些基本常识:
1.IAC(255) telnet的控制命令混杂在字节流里面,以这个255表明这是个三元协商
队列,后跟verb和option
2.verb 有四种类型 Do(253)Dont(254)Will(251)Wnot(252).
Do/Dont-><-Will/Wnot 一方用Do向对方发出请求(Request),另一方用Will作答.
如:Client发送IAC DONT ECHO要求Server不要回显字符,Server用IAC WNOT ECHO
作答
Will/Wnot-><-Do/Dont 一方用Will指定自己(Offer),另一方用Do作答
3.option 有四种 0 二进制传输 1 Echo 3 抑制向前 24 终端类型
4.子协商队列
以255 250开头 255 240结束
void waitString( char *string) /*从server发来的字节流中匹配特定串,找到就返回 */
{
char term[]="dumb"; /* 终端类型: 哑终端 */
unsigned char c,cmd,opt;
for(;;)
{ n=read(sockfd,& c,1); /* 读取一个字节 */
if( n<=0 )
{ printf("socket read error.\n"); exit(-1); }
if (c == 255)
/*如果是IAC(255)字符,表明是server发过来的协商队列,将开始与server协?
*/?
{
cmd = receiveChar(); //读入命令 DO/DONT/WILL/WONT
opt = receiveChar(); //读入选项 0 /1 /3 /24
switch(opt) {
case 1: // echo协商选项,本程序未处理
break;
case 3: // supress go-ahead(抑制向前选项)
break;
case 24: // terminal type(终端类型选项)
if (cmd == 253) {
/*服务器发来DO(253),要求client回答
Client用IAC WILL TERMTYPE 答应告诉server自己终端类型
*/
sendChar((char)255);
sendChar((char)251);
sendChar((char)24);
/*开始用子协商序列回答自己的终端类型
*IAC SB terminal-type IS <term> IAC SE
*/
sendChar((char)255);
sendChar((char)250);
sendChar((char)24);
sendChar((char)0);
sendString(term);
sendChar((char)255);
sendChar((char)240);
/*SB和SE要配对出现 协商序列完毕*/
}
else if (cmd == 250) { //server发来自己的终端类型
while(receiveChar() != 240)
; /*不作处理,直到server发完为止
SubnegotiationEnd(240)*/
}
break;
default: // some other command1
if (cmd == 253) {
// IAC DONT whatever
sendChar((char)255); //其它的协商选项均不同意
sendChar((char)252);
sendChar((char)opt);
}
}
}
}
}
--
V2 Studio Xh2000
※ 修改:.xh 于 Nov 14 22:58:53 修改本文.[FROM: 202.38.248.62]
※ 来源:.华南网木棉站 bbs.gznet.edu.cn.[FROM: 202.38.248.62]
--
※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: 深大荔园晨风转站]
--
※ 转载:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.28.248]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店