「@ChatProject_Note」の編集履歴(バックアップ)一覧はこちら

@ChatProject_Note」(2007/09/25 (火) 01:04:24) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

&font(b,167%){ChatProject開発メモ} &font(b,144%){CONTENTS} #contents ***接続処理 +Internetタブより、コンポーネントを選んでフォームに配置する。 ++サーバ用ならばServersocket。 ++クライアント用ならばClientsocket。 ++サーバ・クライアント兼用ならば両方。&br();以降の処理も、サーバ用かクライアント用かで条件分岐し処理する。 +IPアドレスとポート番号を指定する。 ++サーバの場合、ServerSocket.Portにポート番号をセット。 ++クライアントの場合、ClientSocket.AddressにサーバのIPアドレス、&br();            ClientSocket.Portにポート番号をセット。 +SocketをOpenする、またはActiveプロパティをTrueにする。 ++サーバの場合、ServerSocket.Open、またはServerSocket.Active := True。 ++クライアントの場合、ClientSocket.Open、またはClientSocket.Active := True。 var IsServer : Boolean; // 起動モードフラグ。True=サーバ、False=クライアント。 procedure TForm1.Button1Click(Sender: TObject); begin if IsServer then // サーバモードならば begin ServerSocket1.Port := 0; // ポート番号指定 ServerSocket1.Open; // サーバとして通信オープン end else // クライアントモードならば begin ClientSocket1.Address := '127.0.0.1'; // IPアドレス指定 ClientSocket1.Port := 0; // ポート番号指定 ClientSocket1.Open; // クライアントとして通信オープン end; end; ***多人数チャット +接続を管理しているのはサーバなので、サーバがクライアント間の送受信を仲介する。 ++ServerSocket.ServerTypeをstNonBlockingに設定。 ++サーバに接続中のクライアント数は、ServerSocket.Socket.ActiveConnectionsで取得可能。 +サーバがデータを送信する際は、全クライアントにデータ送信する。 ++クライアントがデータを送信する際は、クライアントが送信したデータをサーバが一度うけとり、全クライアントに送信しなおす。&br();この方法では送信に時間がかかる場合もあるが、全てのクライアントで同期が取れる。 var IsServer : Boolean; // 起動モードフラグ。True=サーバ、False=クライアント。 procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); var i : Integer; begin if Key = #13 then // Enterキーが押された場合 begin if IsServer then // サーバモードなら、 begin Memo1.Lines.Add(Edit1.Text); // 自身のメッセージを表示 for i := 0 to ServerSocket1.Socket.ActiveConnections - 1 do ServerSocket1.Socket.Connections[i].SendText(Edit1.Text); // 全クライアントに送信 end else // クライアントモードならば ClientSocket.Socket.SendText(str); // サーバにメッセージ送信 Edit1.Text := ''; // 送信したメッセージは消去 end; end; procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); // クライアントモードでメッセージを受信した場合 begin Memo1.Lines.Add(Socket.ReceiveText); // サーバから受信したメッセージを表示 end; procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); // サーバモードでメッセージを受信した場合 var str : String; i : Integer; begin str := Socket.ReceiveText; Memo1.Lines.Add(str); // クライアントから受信したメッセージを表示 for i := 0 to ServerSocket1.Socket.ActiveConnections - 1 do // 受信メッセージを ServerSocket1.Socket.Connections[i].SendText(str); // 全クライアントに送信 end;
&font(b,167%){ChatProject開発メモ} | [[Delphi 6 Personal>http://www39.atwiki.jp/kgh07155/pages/13.html#id_7e577900]]で開発中のChatProjectについての覚書。| &font(b,144%){CONTENTS} #contents ***接続処理 +Internetタブより、コンポーネントを選んでフォームに配置する。 ++サーバ用ならばServersocket。 ++クライアント用ならばClientsocket。 ++サーバ・クライアント兼用ならば両方。&br();以降の処理も、サーバ用かクライアント用かで条件分岐し処理する。 +IPアドレスとポート番号を指定する。 ++サーバの場合、ServerSocket.Portにポート番号をセット。 ++クライアントの場合、ClientSocket.AddressにサーバのIPアドレス、&br();            ClientSocket.Portにポート番号をセット。 +SocketをOpenする、またはActiveプロパティをTrueにする。 ++サーバの場合、ServerSocket.Open、またはServerSocket.Active := True。 ++クライアントの場合、ClientSocket.Open、またはClientSocket.Active := True。 var IsServer : Boolean; // 起動モードフラグ。True=サーバ、False=クライアント。 procedure TForm1.Button1Click(Sender: TObject); begin if IsServer then // サーバモードならば begin ServerSocket1.Port := 0; // ポート番号指定 ServerSocket1.Open; // サーバとして通信オープン end else // クライアントモードならば begin ClientSocket1.Address := '127.0.0.1'; // IPアドレス指定 ClientSocket1.Port := 0; // ポート番号指定 ClientSocket1.Open; // クライアントとして通信オープン end; end; ***多人数チャット +接続を管理しているのはサーバなので、サーバがクライアント間の送受信を仲介する。 ++ServerSocket.ServerTypeをstNonBlockingに設定。 ++サーバに接続中のクライアント数は、ServerSocket.Socket.ActiveConnectionsで取得可能。 +サーバがデータを送信する際は、全クライアントにデータ送信する。 ++クライアントがデータを送信する際は、クライアントが送信したデータをサーバが一度うけとり、全クライアントに送信しなおす。&br();この方法では送信に時間がかかる場合もあるが、全てのクライアントで同期が取れる。 var IsServer : Boolean; // 起動モードフラグ。True=サーバ、False=クライアント。 procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); var i : Integer; begin if Key = #13 then // Enterキーが押された場合 begin if IsServer then // サーバモードなら、 begin Memo1.Lines.Add(Edit1.Text); // 自身のメッセージを表示 for i := 0 to ServerSocket1.Socket.ActiveConnections - 1 do ServerSocket1.Socket.Connections[i].SendText(Edit1.Text); // 全クライアントに送信 end else // クライアントモードならば ClientSocket.Socket.SendText(str); // サーバにメッセージ送信 Edit1.Text := ''; // 送信したメッセージは消去 end; end; procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); // クライアントモードでメッセージを受信した場合 begin Memo1.Lines.Add(Socket.ReceiveText); // サーバから受信したメッセージを表示 end; procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); // サーバモードでメッセージを受信した場合 var str : String; i : Integer; begin str := Socket.ReceiveText; Memo1.Lines.Add(str); // クライアントから受信したメッセージを表示 for i := 0 to ServerSocket1.Socket.ActiveConnections - 1 do // 受信メッセージを ServerSocket1.Socket.Connections[i].SendText(str); // 全クライアントに送信 end;

表示オプション

横に並べて表示:
変化行の前後のみ表示: