2台のPCをLANケーブル(クロス)でつないで
お互いにチャットをやり取りするソフトを作りたいです。
例えばPC1で「あああ」っておくるとPC2で「あああ」って表示される。
その逆でPC2で「いいい」っておくるとPC1で「いいい」って表示される。
そんなプログラム教えてください。
//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
IdTCPClient1.Socket.Write(ByteLength(Edit1.Text));
と
SIZE := AContext.Connection.Socket.ReadInt32;
はいらない
初歩的な質問ばかりで申し訳ないですが、LocalAddressの部分はどういう記載方法でしょうか?
Binding.IP := GStack.LocalAddress; → Binding.IP := GStack.192.168.2.10;
IdTCPClient1.Host := GStack.LocalAddress; → IdTCPClient1.Host := GStack.192.168.2.11;
Binding.IP := '192.168.1.1';
IdTCPClient1.Host := '192.168.1.1';
Binding.IP := GStack.LocalAddress; は自身のアドレスを設定しているので
Binding.IP := '192.168.1.1'; のように指定しないでよいです。
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個立てられないので(ポート変えればできるけど)相互通信にはならないけど
基本的なチャット部分は完成しました。
ご教授ありがとうございます。
一点日本語(ひらがな漢字)を送ると????になってしまいます。
IdTCPClient1.IOHandler.DefStringEncoding := IndyTextEncoding_UTF8;
を使ってみましたがうまくいきませんでいた。
送信
IdTCPClient1.Socket.WriteLn(Edit1.Text,IndyTextEncoding_UTF8);
と
受信
Memo1.Lines.Add(AContext.Connection.Socket.ReadLn(IndyTextEncoding_UTF8));
できました
ありがとうございました
ツイート | ![]() |