Delphi LANでチャット

解決


tanahashi  2022-09-26 11:42:03  No: 150492

2台のPCをLANケーブル(クロス)でつないで
お互いにチャットをやり取りするソフトを作りたいです。
例えばPC1で「あああ」っておくるとPC2で「あああ」って表示される。
その逆でPC2で「いいい」っておくるとPC1で「いいい」って表示される。
そんなプログラム教えてください。


AAAAA  2022-09-26 12:30:05  No: 150495

//Clientから送信
procedure TForm1.Button1Click(Sender: TObject);
begin
    IdTCPClient1.Socket.Write(ByteLength(Edit1.Text));
    IdTCPClient1.Socket.WriteLn(Edit1.Text);
end;

//Server起動
procedure TForm1.Button3Click(Sender: TObject);
var
    Binding: TIdSocketHandle;
begin
    Binding := IdTCPServer1.Bindings.Add;
    Binding.IP   := GStack.LocalAddress; //自身のアドレス
    Binding.Port := 200; //適当
    IdTCPServer1.Active := True;
end;

//Client起動
procedure TForm1.Button4Click(Sender: TObject);
begin
    IdTCPClient1.Host := GStack.LocalAddress;  //相手のアドレス
    IdTCPClient1.Port := 200; //Serverと同じポート
    IdTCPClient1.Connect;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    IdTCPServer1.Active := False;
    IdTCPClient1.Disconnect;
end;

//Server受信
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
    SIZE: Integer;
begin
    SIZE := AContext.Connection.Socket.ReadInt32;
    TEXT := AContext.Connection.Socket.ReadLn;
    Memo1.Lines.Add(TEXT);
end


AAAAA  2022-09-26 12:31:32  No: 150496

    IdTCPClient1.Socket.Write(ByteLength(Edit1.Text));
 と
    SIZE := AContext.Connection.Socket.ReadInt32;
 はいらない


tanahashi  2022-09-28 14:41:03  No: 150532

初歩的な質問ばかりで申し訳ないですが、LocalAddressの部分はどういう記載方法でしょうか?
Binding.IP   := GStack.LocalAddress;     →  Binding.IP   := GStack.192.168.2.10;
IdTCPClient1.Host := GStack.LocalAddress;  → IdTCPClient1.Host := GStack.192.168.2.11;


AAAAA  2022-09-28 14:51:52  No: 150533

   Binding.IP := '192.168.1.1';
  IdTCPClient1.Host := '192.168.1.1';

Binding.IP   := GStack.LocalAddress;    は自身のアドレスを設定しているので
Binding.IP := '192.168.1.1'; のように指定しないでよいです。


AAAAA  2022-09-28 15:08:10  No: 150536

Binding.IP   := GStack.LocalAddress;   は変更必要なし

PC1 (192.168.0.1) で動かすプログラム
 IdTCPClient1.Host := "192.168.0.2"

PC2 (192.168.0.2) で動かすプログラム
 IdTCPClient1.Host := "192.168.0.1"

 IdTCPClient1.Host := GStack.LocalAddress;  //相手のアドレス
でも1個のPCで2個起動すれば送信はできるよ? (ClientからServerの送信)
サーバー2個立てられないので(ポート変えればできるけど)相互通信にはならないけど


tanahashi  2022-10-03 11:19:25  No: 150567

基本的なチャット部分は完成しました。
ご教授ありがとうございます。
一点日本語(ひらがな漢字)を送ると????になってしまいます。
IdTCPClient1.IOHandler.DefStringEncoding := IndyTextEncoding_UTF8;
を使ってみましたがうまくいきませんでいた。


AAAAA  2022-10-03 12:00:40  No: 150568

送信
    IdTCPClient1.Socket.WriteLn(Edit1.Text,IndyTextEncoding_UTF8);

受信
    Memo1.Lines.Add(AContext.Connection.Socket.ReadLn(IndyTextEncoding_UTF8));


tanahashi  2022-10-04 14:52:32  No: 150574

できました
ありがとうございました


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加