120 likes | 212 Views
クライアントとサーバ. ネットワークを利用した データのやりとりの手順. クライアント b 307-□□. サーバ b 307-○○. 待ち受け開始. ポート 9999 で待ち受け中. procedure TForm1.N2Click(Sender: TObject); begin ServerSocket1.Port := 9999; // ポート番号を 9999 番に指定 ServerSocket1.Open; // 待ち受けを開始する end ;.
E N D
クライアントとサーバ ネットワークを利用した データのやりとりの手順
クライアントb 307-□□ サーバb 307-○○ 待ち受け開始 ポート9999で待ち受け中 procedure TForm1.N2Click(Sender: TObject); begin ServerSocket1.Port := 9999; // ポート番号を 9999 番に指定 ServerSocket1.Open; // 待ち受けを開始する end; procedure TForm1.ServerSocket1Listen(Sender: TObject; Socket: TCustomWinSocket); // 待ち受け中 var port : String; begin port := IntToStr(ServerSocket1.Port); // ポート番号を取得 memo1.Lines.Add(‘ポート ’ + port + ‘ で待ち受け中...’); // ポート番号と待ち受け中であることを Memo に表示 end;
クライアントb 307-□□ サーバb 307-○○ 待ち受け開始 Host: b307-○○ Port: 9999 ポート9999で待ち受け中 接 続 ホスト名検索中... procedure TForm1.Button1Click(Sender: TObject); begin ClientSocket1.Host := Edit1.Text; ClientSocket1.Port := StrToInt(Edit2.Text); ClientSocket1.Open; end; procedure TForm1.ClientSocket1Lookup(Sender: TObject; Socket: TCustomWinSocket); begin Memo1.Lines.Add('ホスト名検索中...'); end;
クライアントb 307-□□ サーバb 307-○○ 待ち受け開始 Host: b307-○○ Port: 9999 接 続 ポート9999で待ち受け中 ポート9999で待ち受け中 b307-○○・・・> 接続中... ホスト名検索中... procedure TForm1.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); // クライアントが接続 begin rmhost := ServerSocket1.Socket.Connections[0].RemoteHost; // クライアントのホスト名を取得 memo1.Lines.Add(rmhost + '> 接続中...'); // クライアントのホスト名と接続中であることを Memo に表示 end;
クライアントb 307-□□ サーバb 307-○○ Host: b307-○○ Port: 9999 待ち受け開始 Host: b307-○○ Port: 9999 接 続 ポート9999で待ち受け中 b307-○○・・・> 接続中... ホスト名検索中... ホスト名検索中... 接続されました ホスト名検索中... 接続されました 接続中... procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); begin memo1.Lines.Add(‘接続されました’); // Memo コンポーネントに1行表示する Edit1.Enabled := false; Edit2.Enabled := false; end; procedure TForm1.ClientSocket1Connecting(Sender: TObject; Socket: TCustomWinSocket); // 接続中 begin memo1.Lines.Add('接続中...') end;
クライアントb 307-□□ サーバb 307-○○ 待ち受け開始 Host: b307-○○ Port: 9999 接 続 ポート9999で待ち受け中 b307-○○・・・> 接続中... ホスト名検索中... 接続されました 接続中...
クライアントb 307-□□ サーバb 307-○○ 待ち受け開始 Host: b307-○○ Port: 9999 こんにちは! △ △ △ で~す。 ポート9999で待ち受け中 b307-○○・・・> 接続中... 接 続 送 信 ホスト名検索中... 接続されました 接続中... ホスト名検索中... 接続されました 接続中... こんにちは! △△△で~す。 procedure TForm1.Button3Click(Sender: TObject); begin memo1.Lines.Add(edit3.text); ClientSocket1.Socket.SendText(Edit3.text+#13#10); // ソケットに文字列を送信する。文字列の最後に改行コード #13#10 を追加する。 edit3.text := ''; end;
クライアントb 307-□□ サーバb 307-○○ 待ち受け開始 Host: b307-○○ Port: 9999 ポート9999で待ち受け中 b307-○○・・・> 接続中... 接 続 ポート9999で待ち受け中 b307-○○・・・> 接続中... b307-○○・・・>こんにちは! △ △ △ で~す。 ホスト名検索中... 接続されました 接続中... こんにちは! △△△で~す。 procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); // クライアントからのデータを受信 var msg : String; begin msg := ServerSocket1.Socket.Connections[0].ReceiveText; // クライアントから受信した文字列を msg に保存 memo1.Lines.Add(rmhost + ‘> ’ + msg); // 文字列 msg を Memo に表示 end;
クライアントb 307-□□ サーバb 307-○○ 待ち受け開始 Host: b307-○○ Port: 9999 接 続 ポート9999で待ち受け中 b307-○○・・・> 接続中... b307-○○・・・>こんにちは! △ △ △ で~す。 ホスト名検索中... 接続されました 接続中... こんにちは! △△△で~す。
クライアントb 307-□□ サーバb 307-○○ Host: b307-○○ Port: 9999 待ち受け開始 Host: b307-○○ Port: 9999 接 続 切 断 ポート9999で待ち受け中 b307-○○・・・> 接続中... b307-○○・・・>こんにちは! △ △ △ で~す。 ホスト名検索中... 接続されました 接続中... ホスト名検索中... 接続されました 接続中... 切断されました procedure TForm1.Button2Click(Sender: TObject); begin ClientSocket1.Close; end; procedure TForm1.ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket); begin memo1.Lines.Add('切断されました'); Edit1.Enabled := true; Edit2.Enabled := true; end;
クライアントb 307-□□ サーバb 307-○○ 待ち受け開始 Host: b307-○○ Port: 9999 ポート9999で待ち受け中 b307-○○・・・> 接続中... b307-○○・・・>こんにちは! △ △ △ で~す。 ポート9999で待ち受け中 b307-○○・・・> 接続中... b307-○○・・・>こんにちは! △ △ △ で~す。 b307-○○・・・>切断 ホスト名検索中... 接続されました 接続中... 切断されました procedure TForm1.ServerSocket1ClientDisconnect(Sender: Socket: TCustomWinSocket); TObject; // クライアントが切断 begin memo1.Lines.Add(rmhost + ‘> 切断’); // クライアントが切断したことを Memo に表示 end;
課 題 • サーバ側の「待ち受け終了」をクリックし,「終了」をクリックした部分を追加しなさい。 • クライアント側でエラー発生した場合を分岐部分として追加しなさい。 • サーバ側でエラー発生した場合を分岐部分として追加しなさい。 • より分かりやすくなるように改良をしなさい。 • 流れをフローチャートで表しなさい。