pi-14. イベント, イベントハンドラ, ソケット通信

437 Views

January 26, 22

スライド概要

トピックス:イベント, イベントハンドラ, タイマーイベント, ソケット通信

Java の基本(スライド資料とプログラム例)(全17回)
https://www.kkaneko.jp/pro/pi/index.html

金子邦彦研究室ホームページ
https://www.kkaneko.jp/index.html

profile-image

金子邦彦(かねこくにひこ) 福山大学・工学部・教授 ホームページ: https://www.kkaneko.jp/index.html 金子邦彦 YouTube チャンネル: https://youtube.com/user/kunihikokaneko

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

pi-14. イベント,イベン トハンドラ,ソケット 通信 トピックス:イベント,イベントハンドラ,タイ マーイベント,ソケット通信 URL: https://www.kkaneko.jp/pro/pi/index.html (Java の基本,スライド資料とプログラム例) 金子邦彦 1

2.

今回の内容 • イベントの処理 イベントハンドラ、イベントの登録のプログラム、 マルチスレッドの仕組み • 通信の基礎 ソケットのバインド,ソケットの接続要求 2

3.

アウトライン 番号 項目 復習 14-1 イベントとイベントハンドラ 14-2 Java でのタイマーイベント 14-3 タイマーイベントのプログラム例 14-4 ソケット通信 14-5 Java でのソケット通信 各自、資料を読み返したり、課題に取り組んだりも行う この授業では、Java を用いて基礎を学び、マスターする 3

4.

Java などのプログラミング言語の体 験,演習ができるオンラインサービス GDB online http://www.pythontutor.com/ オンラインなので、「秘密にしたいプログラム」を 扱うには十分な注意が必要 4

5.

GDB online で Java を動かす手順 ① ウェブブラウザを起動する ② 次の URL を開く https://www.onlinegdb.com 5

6.

③ 「Language」のところで,「Java」を選ぶ 6

7.

④ ソースコードを入れる ⑤ 実行.実行結果を確認 「Run」をクリック. 7

8.

14-1. イベントとイベントハンド ラ 8

9.

イベントとイベントハンドラ イベントの例 • タイマー • 外部操作(キーボード、マウスの操作) イベントハンドラ イベントが発生したときの処理のこと.特定のイベ ントごとに、事前に、行うべき処理を登録しておく. 9

10.

通常のプログラム実行 イベント発生のたびに マルチスレッド実行 イベント発生 イベントハンドラ内 のタスクを実行 イベント発生 イベントハンドラ内 のタスクを実行 10

11.

14-2. Java でのタイマーイベント 11

12.

演習 資料:13 ~ 18 【トピックス】 • タイマーイベント 12

13.

処理を止める ① 次のソースコードを入れる 100秒止まる 「100000」 とあるのは ミリ秒単位 13

14.

② 実行結果の確認 (あとで使うので、ブラウザを閉じないこと) 「start」と表示される 14

15.

Java でのタイマーイベントとイベントハンドラ イベントハンドラ • 「TimerTask」は Java の標準ライブ ラリのクラス イベントハンドラ の登録 1. 最初 0.1 秒経過 したらイベント発生 2. その後,0.5 秒 間隔でイベント発生 15

16.

マルチスレッドでの実行 start 0.1秒 イベント発生 0.5秒 イベント発生 0.5秒 イベント発生 メインのスレッド(青)は動き続ける 16

17.

タイマーイベント ③ 次のソースコードを入れる 17

18.

④ 実行結果の確認 (あとで使うので、ブラウザを閉じないこと) 「start」と表示される 18

19.

14-3. タイマーイベントのプログ ラム例 19

20.

Ball クラスのオブジェクト y 属性 x の値を 2 増やし, 属性 y の値を 3 増やすメソッド move x x 20

21.

演習 資料:22 ~ 27 【トピックス】 • タイマーイベント 21

22.

① 次のソースコードを入れる 次のページに続く 22

23.

② 実行結果の確認 23

24.

• 0.5 秒ごとに動かす 0.5 秒ごとにイベント発生 24

25.

③ 次のように書き換える 次のページに続く 25

26.

イベント ハンドラ イベント ハンドラ の登録と、 メインの スレッド 26

27.

④ 実行結果の確認 0.5 秒ごとに動く 27

28.

14-4. ソケット通信 28

29.

ソケットとは ソケットは,機器の間の通信や,プロセス間通信に 使用されるインターフェース. 29

30.

インターネットでの通信 さまざまなコンピュータ (要求する) サーバ (要求を待ち続ける) IP アドレス 30

31.

プログラムにバインドされたポート さまざまなコンピュータ (要求する) サーバ (要求を待ち続ける) サーバ 実行中の ソケット プログラム データ送受信 用のソケット IP アドレス 31

32.

インターネットでの通信 • サーバ(要求を待ち続ける) 実行中のプログラムは、サーバソケットにバインド される • さまざまなコンピュータ(要求する) サーバの IP アドレス(あるいはサイト名)とサー バソケットのポート番号を指定して、通信を開始す る 32

33.

インターネットでの通信 通信元コンピュータ 通信先コンピュータ 通信要求 データのやり取り サーバソケット ポート番号 10001 バインド 通信先 プログラム データ送受信 用のソケット 33

34.

14-5. Java でのソケット通信 34

35.

さまざまなコンピュータ (要求する) サーバの IPアドレス(または サイト名)とサーバソケット のポート番号を指定して 通信を開始 サーバ (要求を待ち続ける) プログラムをサーバ ソケットにバインド 接続要求が来るのを待つ (acceptという) データの送受信 データの送受信 35

36.

サーバのプログラムの例 プログラムを、ポート番号 10001 にバインド.接続要 求が来るのを待って、データの送受信を行う ServerSocker sock; Socker s; BufferedReadrer reader; sock = new ServerSocket(); sock.bind(new InetSocketAddress(“<サイト名>", 10001)); s = sock.accept(); reader = new BufferedReader(new InputStreamReader (s.getInputStream())); String line = reader.readLine(); 36

37.

サーバソケットとデータ送受信用のソケット ServerSocker sock; サーバソケット Socker s; BufferedReadrer reader; sock = new ServerSocket(); sock.bind(new InetSocketAddress(“<ホスト名>", 10001)); データ送受信用のソケット ※ データ送受信に使うソケット. 「サーバソケット」とは別のもの s = sock.accept(); reader = new BufferedReader(new InputStreamReader (s.getInputStream())); String line = reader.readLine(); 37

38.

サーバとの通信のプログラムの例 サーバの IP アドレス(またはサイト名)と、ポート 番号 10001 を指定して通信を開始。 Socket s = new Socket("<サーバのサイト名>", 10001); BufferedWriter out = new BufferedWriter (new OutputStreamWriter(s.getOutputStream())); out.write("GET /index.html HTTP/1.0\r\n"); out.flush(); 38

39.

演習 資料:40 ~ 45 【トピックス】 • ソケット通信 39

40.

演習 ① ウェブブラウザを起動する ② 次の URL を開く https://paiza.io/ ③ もし,表示が英語になっていたら,日本語に切り 替える

41.

④ 「コード作成を試してみる」をクリック ⑤ 「Java」を選ぶ(左上のボタンをクリックするとメニューが出る)

42.

プログラムの 編集画面 プログラムを 書き換えること ができる 実行ボタン 42

43.

編集画面を確認する。 すでに、Java プログラムが入っている. 書き換えて使う.

44.

① 次のソースコードを入れる 44

45.

② 実行をクリック.実行結果を確認 45

46.

まとめ • ソケットの機能により,インターネットでの通信 ができる • サーバ側では,プログラムを,サーバソケットを バインドする. • サーバとの通信では,サーバの IP アドレス(また はサイト名)と、ポート番号を指定して通信を開 始する. 46

47.

関連ページ • Java プログラミング入門 GDB online を使用 https://www.kkaneko.jp/pro/ji/index.html • Java の基本 Java Tutor, GDB online を使用 https://www.kkaneko.jp/pro/pi/index.html • Java プログラム例 https://www.kkaneko.jp/pro/java/index.html 47

48.

14-2 import java.util.*; public class Main { public static void main(String[] args) { System.out.println("start"); try { Thread.sleep(100000); } catch(InterruptedException e) {} } } 48

49.
[beta]
14-2
import java.util.*;

class MyTask extends TimerTask {
public void run() {
System.out.println("hello");
}
}

public class Main

{
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new MyTask(), 100, 500);
System.out.println("start");
try {
Thread.sleep(100000);

} catch(InterruptedException e) {}
}
}

49

50.
[beta]
14-3
class Ball {
double x;
double y;
public Ball(double x, double y) {
this.x = x;
this.y = y;
}
public void move() {
this.x = this.x + 2;
this.y = this.y + 3;
}
public void printout() {
System.out.printf("%f %f\n", this.x, this.y);
}
}
public class Main
{
public static void main(String[] args) {
Ball b = new Ball(0, 0);
b.printout();
b.move();
b.printout();
}
}

50

51.
[beta]
14-3
import java.util.*;
class Ball {
double x;
double y;
public Ball(double x, double y) {
this.x = x;
this.y = y;
}
public void move() {
this.x = this.x + 2;
this.y = this.y + 3;
}
public void printout() {
System.out.printf("%f %f\n", this.x, this.y);
}
}

class MyTask extends TimerTask {
Ball b;
public MyTask() {
super();
this.b = new Ball(0, 0);
}
public void run() {
b.move();
b.printout();
}
}
public class Main
{
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new MyTask(), 100, 500);
System.out.println("start");
try {
Thread.sleep(100000);
} catch(InterruptedException e) {}
}
}

51

52.
[beta]
14-5
import jav a.util.*;

import jav a.net.*;
import jav a.io.*;

public class Main {
public static v oid main(String[] args) throws Exception {
try {
Socket s = new Socket("www.kkaneko.jp", 80);
Buf f eredReader in = new Buf f eredReader
(new InputStreamReader(s.getInputStream()));
Buf f eredWriter out = new Buf f eredWriter
(new OutputStreamWriter(s.getOutputStream()));
out.write("GET /index.html HTTP/1.0\r\n");
out.write("Host: www.kkaneko.jp:80\r\n");

out.write("\r\n");
out.f lush();
Sy stem.out.println(in.readLine());
Sy stem.out.println(in.readLine());
Sy stem.out.println(in.readLine());
Sy stem.out.println(in.readLine());
} catch(Exception e) {
e.printStackTrace();
}
}
}

52