没有什么可以阻止您使用 Indy 的 TIdTCPServer 组件执行此操作。
TIdTCPServer 仅设置连接。你需要实现其余的。所以实际发送和接收的顺序可以是任何你想要的。
将此代码放入您的 TIdTCPServer 组件的 OnExecute 事件中:
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;
以下是您可以非常简单地设置 TIdTCPServer 的方法:
IdTCPServer1.Bindings.Clear;
IdTCPServer1.Bindings.Add.SetBinding('127.0.0.1', 8080);
IdTCPServer1.Active := True;
这告诉服务器仅在端口 8080 上侦听环回地址。这可以防止计算机之外的任何人连接到它。
然后,要连接您的客户端,您可以转到 Windows 命令提示符并键入以下内容:
telnet 127.0.0.1 8080
这是输出:
你叫什么名字?
马库斯
你好,马库斯。
你想玩游戏吗?
与主机的连接丢失。
没有远程登录?这是在 Vista 和 7 上安装 telnet 客户端的方法。
或者使用 TIdTCP 客户端,您可以这样做:
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;
这里要注意的重要一点是,ReadLn 语句一直等到有数据。这就是这一切背后的魔力。