Không có gì ngăn cản bạn thực hiện việc này với thành phần TIdTCPServer của Indy.
Máy chủ TIdTCPS chỉ thiết lập kết nối. Bạn sẽ cần phải thực hiện phần còn lại. Vì vậy, trình tự gửi và nhận thực tế có thể là bất cứ điều gì bạn muốn.
Đặt mã này trong trường hợp OnExecute phần TIdTCPServer của bạn:
var
sName: String;
begin
// Send command to client immediately after connection
AContext.Connection.Socket.WriteLn('What is your name?');
// Receive response from client
sName := AContext.Connection.Socket.ReadLn;
// Send a response to the client
AContext.Connection.Socket.WriteLn('Hello, ' + sName + '.');
AContext.Connection.Socket.WriteLn('Would you like to play a game?');
// We're done with our session
AContext.Connection.Disconnect;
end;
Đây là cách bạn có thể thiết lập các TIdTCPServer thực sự đơn giản:
IdTCPServer1.Bindings.Clear;
IdTCPServer1.Bindings.Add.SetBinding('127.0.0.1', 8080);
IdTCPServer1.Active := True;
này cho máy chủ để lắng nghe trên địa chỉ loopback chỉ, tại cổng 8080. Điều này ngăn mọi người bên ngoài máy tính của bạn kết nối với nó.
Sau đó, để kết nối khách hàng của bạn, bạn có thể đi đến một dấu nhắc lệnh Windows và gõ như sau:
telnet 127.0.0.1 8080
Dưới đây là kết quả:
tên của bạn là gì?
Marcus
Xin chào, Marcus.
Bạn có muốn chơi trò chơi không?
Kết nối với máy chủ bị mất.
Không có telnet? Đây là cách để install telnet client on Vista and 7.
Hoặc với một khách hàng TIdTCP, bạn có thể làm điều này:
var
sPrompt: String;
sResponse: String;
begin
// Set port to connect to
IdTCPClient1.Port := 8080;
// Set host to connect to
IdTCPClient1.Host := '127.0.0.1';
// Now actually connect
IdTCPClient1.Connect;
// Read the prompt text from the server
sPrompt := IdTCPClient1.Socket.ReadLn;
// Show it to the user and ask the user to respond
sResponse := InputBox('Prompt', sPrompt, '');
// Send user's response back to server
IdTCPClient1.Socket.WriteLn(sResponse);
// Show the user the server's final message
ShowMessage(IdTCPClient1.Socket.AllData);
end;
Một điều quan trọng cần lưu ý ở đây là những điều khoản ReadLn chờ đợi cho đến khi có dữ liệu. Đó là phép thuật đằng sau tất cả.
Có thể bạn có thể mô phỏng hành vi này bằng các phương thức 'IdTCPClient1.IOHandler.ReadLnWait' hoặc' IdTCPClient1.IOHandler.WaitFor'. Nếu không, bằng cách sử dụng 'TIdCmdTCPCLient' có thể giải quyết vấn đề của bạn. – LightBulb
Phiên bản Indy nào? –
Hiện tại, tôi đang sử dụng Indy 10 ở Delphi 2010. – LightBulb