2台のPC間で、ソケット通信を使ったチャットの様な物を作成しようとしています。
Edit1に入力した文字列をButton1クリック時に送信し、もう一台のPCで受信してMemo1に受信内容を表示するといった物を作成したいのです。
TcpClientとTcpServerを使うのかなと思い、色々と書いてみたのですが接続はできているのですが、送受信の流れがわからず困っています。以下がここまでに書いたソースです。どなたかご存じの方いらっしゃいましたらご享受ください。
procedure TForm1.FormCreate(Sender: TObject);
begin
TcpServer1.LocalHost := '192.168.1.3';
TcpServer1.LocalPort := '80';
TcpServer1.Active := true;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
TcpClient1.RemoteHost := '192.168.1.3';
TcpClient1.RemotePort := '80';
TcpClient1.Active := true;
if TcpClient1.Connect then
begin
StatusBar1.Panels[0].Text := '接続成功';
TcpClient1.Sendln(Edit1.Text);
end
else StatusBar1.Panels[0].Text := '接続失敗';
end;
procedure TForm1.TcpServer1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
begin
Memo1.Text:=ClientSocket.ReceiveLn;
end;
以下のソースで自分自身に対して送信した場合は正しく動作しました。
この同じexeファイルをもう一台のPCにも起動していますが、データ来ていないようです。テスト方法が悪いのでしょうか・・・。ネットワークプログラムの経験があまり無いので、困っています。
procedure TForm1.FormCreate(Sender: TObject);
begin
TcpServer1.LocalHost := '192.168.1.2';
TcpServer1.LocalPort := '8080';
TcpServer1.Active := true;
end;
//送信
procedure TForm1.Button1Click(Sender: TObject);
begin
TcpClient1.RemoteHost := '192.168.1.2';
TcpClient1.RemotePort := '8080';
TcpClient1.Active := true;
if TcpClient1.Connect then
begin
StatusBar1.Panels[0].Text := '接続成功';
TcpClient1.Sendln(Edit1.Text);
end
else StatusBar1.Panels[0].Text := '接続失敗';
TcpClient1.Active := false;
end;
//受信時
procedure TForm1.TcpServer1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
begin
Memo1.Text:=ClientSocket.ReceiveLn;
end;
自己解決しました。
ホストの指定が自分自身になっていたためでした。
凡ミスですね。
ツイート | ![]() |