2010-11-09 34 views
14

Tôi mới sử dụng Indy và tôi muốn xây dựng một máy chủ proxy đơn giản với nó. Đây là một thư viện khá lớn, và tôi không biết bắt đầu từ đâu. Khi máy khách kết nối với máy chủ, OnExucute sẽ kích hoạt và nhận kết nối máy khách dưới dạng tham số (AContext.Connection).Máy chủ proxy sử dụng Indy

tôi muốn làm sau:

[client connection] := AContext.Connection 
read host/port from [client connection] 
[remote connection] := connect to host/port 
while both connections alive: 
    if data available in [client connection]: 
    read data from [client connection] 
    write data to [remote connection] 
    if data available in [remote connection]: 
    read data from [remote connection] 
    write data to [client connection] 

Câu hỏi đặt ra là những gì chức năng tôi nên sử dụng cho điều đó? Có là IOHandler tài sản trong đối tượng kết nối với tấn của họ. Hãy giúp tôi.

Tôi đang sử dụng Indy đi kèm với Delphi2010.

Trả lời

19

Indy có các thành phần proxy riêng để thực hiện những gì bạn đang yêu cầu. Nhìn vào các thành phần TIdMappedPortTCPTIdHTTPProxyServer làm địa điểm bắt đầu.

TIdMappedPortTCP là một proxy đa năng chỉ truyền dữ liệu thô qua lại. Bạn có thể sử dụng sự kiện OnConnect để cấu hình động Máy chủ/Cổng mục tiêu cho kết nối đó (chẳng hạn như đọc nó từ máy khách) hoặc bạn có thể đặt thuộc tính MappedHostMappedPort tĩnh cho tất cả các kết nối. Bạn có thể sử dụng các sự kiện OnExecuteOnOutboundData của mình để sửa đổi dữ liệu khi nó chuyển qua proxy, nếu cần.

TIdHTTPProxyServer là một proxy chuyên chỉ dành cho proxy HTTP-based, nơi mà các khách hàng sử dụng HTTP GET, POST, HEAD, và CONNECT động từ, chỉ định các URL tuyệt đối với mục tiêu chủ/Cảng, và sau đó vượt qua HTTP header và dữ liệu trở lại và khi cần thiết (CONNECT thường được sử dụng để ủy quyền kết nối SSL/TLS thông qua tường lửa).

+6

Lời khuyên thực sự khôn ngoan, cảm ơn! Cả hai nguồn của các thành phần đều rất hữu ích. Nếu ai đó quan tâm, cuối cùng tôi đến với một cái gì đó như thế: http://pastebin.com/ixt2gssD – Frantic

+0

Mã của bạn trên pastebin đã cứu ngày của tôi. Cảm ơn Frantic. –

Các vấn đề liên quan