gin
reply[0]:=char(F_IAC);
reply:=char(F_WILL);
reply:=nOpt;
Socket.SendBuf(reply,Length(reply));
end;
if(cmd=char(F_WILL)) then
begin
reply[0]:=char(F_IAC);
reply:=char(F_DO);
reply:=nOpt;
Socket.SendBuf(reply,
Length(reply));
end;
end;
if((nOpt<>char(F_GOAHEAD))or(nOpt<>char(F_ECHO))) then
begin
if(cmd=char(F_DO)) then
begin
reply[0]:=char(F_IAC);
reply:=char(F_WONT);
reply:=nOpt;
Socket.SendBuf(reply,
Length(reply));
end;
if(cmd=char(F_WILL)) then
begin
reply[0]:=char(F_IAC);
reply:=char(F_DONT);
reply:=nOpt;
Socket.SendBuf(reply,
Length(reply));
end;
end;
end;
end; //end F_IAC
if(ch<>char(F_IAC)) then
begin
m_string:=m_string+ch;
end;
m_count:=m_count+1;
end;
//假设编程者知道Unix的LOGIN和PASSWORD
if(Length(m_string)>0) then
begin
while ((Pos(‘login:'',m_string)>0)and(not
loginsend)) do
begin
cmdtounix:=‘root''+#10+#13;
code:=Socket.SendBuf(cmdtounix,6);
loginsend:=True;
end;
while ((Pos(‘Password:'',m_string)>0)and(not passsend)) do
begin
cmdtounix:=‘root''+#13+#10;
code:=Socket.SendBuf(cmdtounix,6);
passsend:=True;
m_string:=‘'';
end;
if ( Pos(‘jcy:/#>'',m_string)>0) then
begin
cmdtounix:=‘mkdir /tmp/fang''+#
13+#10;
code:=Socket.SendBuf(cmdtounix,
Length(cmdtounix));
if code>0 then
begin
ClientSocket1.Active:=False;
Close;
end;
end;
end;
end;
end;
小 结
虽然这段程序并不复杂,但它是网络软件编程的一个基本思路。需要指出的是,在某些场合,程序员也可以根据自己的需要定义一些协议,以便解决问题。当然,自己定义的协议应用范围可能会很窄,只能在某个系统或
程序中使用。