TCPの使い方
コンポーネントパレットのInternetタブにあるTCPコンポーネントを使うと2台のコンピュータの間で、TCP/IPによる通信が簡単にできます。当然、2台のコンピュータはネットワークでつながれており、TCP/IPが正しくインストールされている必要があります。
Delphi4ではTCPコンポーネントはなくなりました。MSGコンポーネントなどを使ってください。
TCPを使うときの一般的クライアント側手順
例
procedure TfrmPeerA.TCP1Connect(Sender: TObject);
begin
lblConnect.Caption := 'Connected';
end;
procedure TfrmPeerA.TCP1Error(Sender: TObject; Number: Smallint;
var Description: WideString; Scode: Integer; const Source,
HelpFile: WideString; HelpContext: Integer; var CancelDisplay: WordBool);
begin
lblConnect.Caption := 'Connect Error';
end;
procedure TfrmPeerA.cmdSendClick(Sender: TObject);
begin
TCP1.SendData(txtSend.Text);
end;
procedure TfrmPeerA.cmdDisconnectClick(Sender: TObject);
begin
TCP1.Close;
lblConnect.Caption := 'Disconnect';
end;
procedure TfrmPeerA.cmdConnectClick(Sender: TObject);
begin
try
with TCP1 do
begin
TCP1.Close;
RemoteHost := txtRemoteHost.Text;
RemotePort := StrToInt(txtRemotePort.Text);
LocalPort := StrToInt(txtLocalPort.Text);
txtLocalHost.Text := LocalIP;
Connect(NoParam, NoParam)
end;
except
on EOleException do MessageDlg('Exception', mtError, [mbOK], 0)
end;
end;
procedure TfrmPeerA.FormCreate(Sender: TObject);
begin
with TCP1 do
begin
RemoteHost := txtRemoteHost.Text;
RemotePort := StrToInt(txtRemotePort.Text);
LocalPort := StrToInt(txtLocalPort.Text);
end;
end;
function TfrmPeerA.NoParam: Variant;
begin
TVarData(Result).VType := varError;
TVarData(Result).VError:= DISP_E_PARAMNOTFOUND;
end;
TCPを使うときの一般的サーバ側手順
例
procedure TfrmPeerB.cmdSetClick(Sender: TObject);
begin
with TCP2 do
begin
RemoteHost := txtRemoteHost.Text;
RemotePort := StrToInt(txtRemotePort.Text);
LocalPort := StrToInt(txtLocalPort.Text);
txtLocalHost.Text := LocalIP;
Listen;
end;
end;
procedure TfrmPeerB.TCP2ConnectionRequest(Sender: TObject;
requestID: Integer);
begin
if TCP2.State <> sckClosed then
TCP2.Close;
TCP2.Accept(requestID);
lblConnect.Caption := 'Connected';
end;
procedure TfrmPeerB.TCP2DataArrival(Sender: TObject; bytesTotal: Integer);
var
rcvData: OleVariant;
begin
TCP2.GetData(rcvData, varOlestr, 80);
txtListen.Text := rcvData;
end;