「@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;