bsp; invalidRequests:=0; {0错误} LookUpTimeOut:=60000; {超时值=1分钟} timer1.Enabled:=true; {打开定时器} n11.Enabled:=false; {开启服务菜单项失效} n21.Enabled:=true; {关闭服务菜单项有效} serversocket1.Port:=988; {代理服务器端口=988} serversocket1.Active:=true; {开启服务} form1.hide; {隐藏界面,缩小到System Tray上} end;
file://开启服务菜单项… procedure TForm1.N11Click(Sender: TObject); begin serversocket1.Active:=true; {开启服务} end;
file://停止服务菜单项… procedure TForm1.N21Click(Sender: TObject); begin serversocket1.Active:=false; {停止服务} N11.Enabled:=True; N21.Enabled:=False; Service_Enabled:=false; {标志清零} end;
file://主窗口建立… procedure TForm1.FormCreate(Sender: TObject); begin Service_Enabled:=false; timer2.Enabled:=true; {窗口建立时,打开定时器} end;
file://窗口关闭时… procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin timer1.Enabled:=false; {关闭定时器} if Service_Enabled then serversocket1.Active:=false; {退出程序时关闭服务} end;
file://退出程序按钮… procedure TForm1.N01Click(Sender: TObject); begin form1.Close; {退出程序} end;
file://开启代理服务后… procedure TForm1.ServerSocket1Listen(Sender: TObject; Socket: TCustomWinSocket); begin Service_Enabled:=true; {置正在服务标志} N11.Enabled:=false; N21.Enabled:=true; end;
file://被代理端连接到代理服务器后,建立一个会话,并与套接字绑定… procedure TForm1.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); var i,j: integer; begin j:=-1; for i:=1 to sessions do {查找是否有空白项} if not session[i-1].Used and not session[i-1].CSocket.active then begin j:=i-1; {有,分配它} session[j].Used:=true; {置为在用} break; end else if not session[i-1].Used and session[i-1].CSocket.active then session[i-1].CSocket.active:=false; if j=-1 then begin {无,新增一个} j:=sessions; inc(sessions); setlength(session,sessions); session[j].Used:=true; {置为在用} session[j].CSocket:=TClientSocket.Create(nil); session[j].CSocket.OnConnect:=ClientSocket1Connect; session[j].CSocket.OnDisconnect:=ClientSocket1Disconnect; session[j].CSocket.OnError:=ClientSocket1Error; session[j].CSocket.OnRead:=ClientSocket1Read; session[j].CSocket.OnWrite:=ClientSocket1Write; session[j].Lookingup:=false; end; session[j].SS_Handle:=socket.socketHandle; {保存句柄,实现绑定} session[j].Request:=false; {无请求} session[j].client_connected:=true; {客户机已连接} session[j].remote_connected:=false; {远程未连接} edit1.text:=inttostr(sessions); end;
file://被代理端断开时… procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); var i,j,k: integer; begin for i:=1 to sessions do if (session[i-1].SS_Handle=socket.SocketHandle) and session[i-1].Used then begin session[i-1].client_connected:=false; {客户机未连接} if session[i-1].remote_connected then session[i-1].CSocket.active:=false {假如远程尚连接,断开它} else session[i-1].Used:=false; {假如两者都断开,则置释放资源标志} break; end; j:=sessions; k:=0; for i:=1 to j do {统计会话数组尾部有几个未用项} begin if session[j-i].Used then break; inc(k); end; if k>0 then {修正会话数组,释放尾部未用项} begin sessions:=sessions-k; setlength(session,sessions); end; edit1.text:=inttostr(sessions); end;
file://通信错误出现时… procedure TForm1.ServerSocket1ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); var i,j,k: integer; begin for i:=1 to sessions do if (session[i-1].SS_Handle=socket.SocketHandle) and session[i-1].Used then begin session[i-1].client_connected:=false; {客户机未连接} if session[i-1].remote_connected then session[i-1].CSocket.active:=false {假如远程尚连接,断开它} else session[i-1].Used:=false; {假如两者都断开,则置释放资源标志} break; end; j:=sessions; k:=0; for i:=1 to j do begin if session[j-i].Used then break; inc(k); end; if k>0 then begin sessions:=sessions-k; setlength(session,sessions); end; edit1.text:=inttostr(sessions); errorcode:=0; end;
file://被代理端发送来页面请求时… procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var tmp,line,host: string; i,j,port: integer; begin for i:=1 to sessions do &nbs 上一页 [1] [2] [3] [4] [5] 下一页 |