pi-12. イベント、イベントハンドラ、ソケット通信

>100 Views

January 26, 22

スライド概要

Java の基本
URL: https://www.kkaneko.jp/cc/pi/index.html

profile-image

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

シェア

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

各ページのテキスト
1.

pi-12. イベント、イベントハンドラ、 ソケット通信 (Java の基本) URL: https://www.kkaneko.jp/cc/pi/index.html 金子邦彦 1

2.

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

3.

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

4.

j12-1. イベントとイ ベントハンドラ Java を基礎から学びた い人へ(入門者向け) 金子邦彦 4

5.

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

6.

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

7.

j12-2. Java でのタイ マーイベント Java を基礎から学びた い人へ(入門者向け) 金子邦彦 7

8.

オンライン開発環境 GDBonline • プログラミングを行える Web サービス https://www.onlinegdb.com • ウェブブラウザを使う • たくさんの言語を扱うことができる Python3, Java, C/C++, C#, JavaScript, R, アセンブリ言語,SQL など オンラインなので、「秘密にしたいプログラム」を 扱うには十分な注意が必要 8

9.

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

10.

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

11.

実行ボタン エディタ画面 プログラムを 書き換えること ができる 11

12.

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

13.

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

14.

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

15.

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

16.

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

17.

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

18.

j12-3. タイマーイベ ントのプログラム例 Java を基礎から学びた い人へ(入門者向け) 金子邦彦 18

19.

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

20.

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

21.

② 実行結果の確認 21

22.

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

23.

① 次のように書き換える 次のページに続く 23

24.

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

25.

② 実行結果の確認 0.5 秒ごとに動く 25

26.

j12-4. ソケット通信 Java を基礎から学びた い人へ(入門者向け) 金子邦彦 26

27.

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

28.

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

29.

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

30.

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

31.

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

32.

j12-5. Java でのソ ケット通信 Java を基礎から学びた い人へ(入門者向け) 金子邦彦 32

33.

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

34.

サーバのプログラムの例 プログラムを、ポート番号 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(); 34

35.

サーバソケットとデータ送受信用のソケット 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(); 35

36.

サーバとの通信のプログラムの例 サーバの 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(); 36

37.

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

38.

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

39.

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

40.

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

41.

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

42.

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

43.

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

44.

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

45.
[beta]
12-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) {}
}
}

45

46.
[beta]
12-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();
}
}

46

47.
[beta]
12-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) {}
}
}

47

48.
[beta]
12-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();
}
}
}

48