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;