質問編集履歴

3

エラーコード追加、追加の質問

2020/01/19 11:34

投稿

1236
1236

スコア19

test CHANGED
File without changes
test CHANGED
@@ -8,21 +8,21 @@
8
8
 
9
9
  ### 発生している問題・エラーメッセージ
10
10
 
11
- 送信が多分うまくいってな
11
+ 回答者様の通り改善したところ、座標の送信受信はできたと思います。しかし、端末を二つ開きそれぞれMyClient4を実行し、片方の実行画面で線を引いても、もう片方の実行画面に線描かれせん。一方の画面で線を引いた時、どちらの画面にも線を引にはどうしたらよでしょうか。何度もすませんが解答お願いいたします。
12
12
 
13
13
  ```
14
14
 
15
- エラーメッセージ
16
-
17
- ```at MyCanvas2.mouseDragged(MyClient4.java:317)
15
+ Exception in thread "Thread-0" java.lang.NumberFormatException: For input string: "Hello,"
18
-
16
+
19
- at java.desktop/java.awt.Component.processMouseMotionEvent(Component.java:6684)
17
+ at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
20
-
18
+
21
- at java.desktop/java.awt.Component.processEvent(Component.java:6405)
19
+ at java.base/java.lang.Integer.parseInt(Integer.java:658)
22
-
20
+
23
- at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5012)
21
+ at java.base/java.lang.Integer.parseInt(Integer.java:776)
22
+
24
-
23
+ at MyClient4$MesgRecvThread.run(MyClient4.java:75)
24
+
25
-
25
+ ```
26
26
 
27
27
 
28
28
 
@@ -32,24 +32,6 @@
32
32
 
33
33
  ```java
34
34
 
35
- import java.net.*;
36
-
37
- import java.io.*;
38
-
39
- import javax.swing.*;
40
-
41
- import java.lang.*;
42
-
43
- import java.awt.*;
44
-
45
- import java.awt.event.*;
46
-
47
- import javax.swing.*;
48
-
49
- import java.util.*;
50
-
51
-
52
-
53
35
  public class MyClient4 extends JFrame {
54
36
 
55
37
  private Container c;
@@ -92,7 +74,7 @@
92
74
 
93
75
  this.setLayout(new BorderLayout(10, 10)); // レイアウト方法の指定
94
76
 
95
- this.add(mc, BorderLayout.CENTER); // 左側に mc (キャンバス)を配置
77
+ this.add(mc, BorderLayout.CENTER); // 左側に mc (キャンバス)を配置
96
78
 
97
79
  this.setVisible(true); //可視化
98
80
 
@@ -166,7 +148,7 @@
166
148
 
167
149
  out = new PrintWriter(socket.getOutputStream(), true);
168
150
 
169
- out.println(myName);//接続の最初に名前を送る
151
+ out.println(myName);//接続の最初に名前を送る L68
170
152
 
171
153
  while(true) {
172
154
 
@@ -180,15 +162,19 @@
180
162
 
181
163
  String cmd = inputTokens[0];//コマンドの取り出し.1つ目の要素を取り出す
182
164
 
183
- int px = Integer.parseInt(inputTokens[0]);//数値に変換する
165
+ int px = Integer.parseInt(inputTokens[0]);//数値に変換する L75
184
-
166
+
185
- int py = Integer.parseInt(inputTokens[1]);//数値に変換する
167
+ int py = Integer.parseInt(inputTokens[1]);//数値に変換する
186
-
168
+
187
- int x = Integer.parseInt(inputTokens[2]);//数値に変換する
169
+ int x = Integer.parseInt(inputTokens[2]);//数値に変換する
188
-
170
+
189
- int y = Integer.parseInt(inputTokens[3]);//数値に変換する
171
+ int y = Integer.parseInt(inputTokens[3]);//数値に変換する
190
-
172
+
191
- mc.paint2(px, py, x, y);
173
+ mc.paint2(px, py, x, y);
174
+
175
+ mc.repaint();
176
+
177
+
192
178
 
193
179
  }else{
194
180
 
@@ -196,8 +182,12 @@
196
182
 
197
183
  }
198
184
 
185
+
186
+
199
187
  }
200
188
 
189
+
190
+
201
191
  socket.close();
202
192
 
203
193
  } catch (IOException e) {
@@ -226,6 +216,8 @@
226
216
 
227
217
 
228
218
 
219
+
220
+
229
221
  class MyCanvas2 extends Canvas implements MouseListener, MouseMotionListener {
230
222
 
231
223
  // ■ フィールド変数
@@ -246,6 +238,8 @@
246
238
 
247
239
  PrintWriter out;//出力用のライター
248
240
 
241
+ MyClient4 client4;
242
+
249
243
 
250
244
 
251
245
  // ■ コンストラクタ
@@ -260,6 +254,8 @@
260
254
 
261
255
  addMouseMotionListener(this); // マウスの動きを監視するよう指定
262
256
 
257
+ client4 = obj;
258
+
263
259
  }
264
260
 
265
261
 
@@ -382,15 +378,11 @@
382
378
 
383
379
  //サーバに情報を送る
384
380
 
385
- out.println(msg);//送信データをバッファに書き出す
381
+ client4.out.println(msg);//送信データをバッファに書き出す
386
-
382
+
387
- out.flush();//送信データをフラッシュ(ネットワーク上にはき出す)する
383
+ client4.out.flush();//送信データをフラッシュ(ネットワーク上にはき出す)する
388
-
389
-
390
-
384
+
391
- repaint(); // 再描画
385
+ repaint(); // 再描画
392
-
393
-
394
386
 
395
387
  }
396
388
 
@@ -400,10 +392,238 @@
400
392
 
401
393
  } // 今回は使わないが、無いとコンパイルエラー
402
394
 
403
-
404
-
405
395
  }
406
396
 
397
+ *********************************************************************
398
+
399
+ MyServer.java
400
+
401
+
402
+
403
+ import java.net.ServerSocket;
404
+
405
+ import java.net.Socket;
406
+
407
+ import java.io.InputStreamReader;
408
+
409
+ import java.io.BufferedReader;
410
+
411
+ import java.io.PrintWriter;
412
+
413
+ import java.io.IOException;
414
+
415
+
416
+
417
+ //スレッド部(各クライアントに応じて)
418
+
419
+ class ClientProcThread extends Thread {
420
+
421
+ private int number;//自分の番号
422
+
423
+ private Socket incoming;
424
+
425
+ private InputStreamReader myIsr;
426
+
427
+ private BufferedReader myIn;
428
+
429
+ private PrintWriter myOut;
430
+
431
+ private String myName;//接続者の名前
432
+
433
+
434
+
435
+ public ClientProcThread(int n, Socket i, InputStreamReader isr, BufferedReader in, PrintWriter out) {
436
+
437
+ number = n;
438
+
439
+ incoming = i;
440
+
441
+ myIsr = isr;
442
+
443
+ myIn = in;
444
+
445
+ myOut = out;
446
+
447
+ }
448
+
449
+
450
+
451
+ public void run() {
452
+
453
+ try {
454
+
455
+ myOut.println("Hello, client No." + number + "! Enter 'Bye' to exit.");//初回だけ呼ばれる
456
+
457
+
458
+
459
+ myName = myIn.readLine();//初めて接続したときの一行目は名前
460
+
461
+
462
+
463
+ while (true) {//無限ループで,ソケットへの入力を監視する
464
+
465
+ String str = myIn.readLine();
466
+
467
+ System.out.println("Received from client No."+number+"("+myName+"), Messages: "+str);
468
+
469
+ if (str != null) {//このソケット(バッファ)に入力があるかをチェック
470
+
471
+ if (str.toUpperCase().equals("BYE")) {
472
+
473
+ myOut.println("Good bye!");
474
+
475
+ break;
476
+
477
+ }
478
+
479
+ MyServer.SendAll(str, myName);//サーバに来たメッセージは接続しているクライアント全員に配る
480
+
481
+ }
482
+
483
+ }
484
+
485
+ } catch (Exception e) {
486
+
487
+ //ここにプログラムが到達するときは,接続が切れたとき
488
+
489
+ System.out.println("Disconnect from client No."+number+"("+myName+")");
490
+
491
+ MyServer.SetFlag(number, false);//接続が切れたのでフラグを下げる
492
+
493
+ }
494
+
495
+ }
496
+
497
+ }
498
+
499
+
500
+
501
+ class MyServer{
502
+
503
+
504
+
505
+ private static int maxConnection=100;//最大接続数
506
+
507
+ private static Socket[] incoming;//受付用のソケット
508
+
509
+ private static boolean[] flag;//接続中かどうかのフラグ
510
+
511
+ private static InputStreamReader[] isr;//入力ストリーム用の配列
512
+
513
+ private static BufferedReader[] in;//バッファリングをによりテキスト読み込み用の配列
514
+
515
+ private static PrintWriter[] out;//出力ストリーム用の配列
516
+
517
+ private static ClientProcThread[] myClientProcThread;//スレッド用の配列
518
+
519
+ private static int member;//接続しているメンバーの数
520
+
521
+
522
+
523
+ //全員にメッセージを送る
524
+
525
+ public static void SendAll(String str, String myName){
526
+
527
+ //送られた来たメッセージを接続している全員に配る
528
+
529
+ for(int i=1;i<=member;i++){
530
+
531
+ if(flag[i] == true){
532
+
533
+ out[i].println(str);
534
+
535
+ out[i].flush();//バッファをはき出す=>バッファにある全てのデータをすぐに送信する
536
+
537
+ System.out.println("Send messages to client No."+i);
538
+
539
+ }
540
+
541
+ }
542
+
543
+ }
544
+
545
+
546
+
547
+ //フラグの設定を行う
548
+
549
+ public static void SetFlag(int n, boolean value){
550
+
551
+ flag[n] = value;
552
+
553
+ }
554
+
555
+
556
+
557
+ //mainプログラム
558
+
559
+ public static void main(String[] args) {
560
+
561
+ //必要な配列を確保する
562
+
563
+ incoming = new Socket[maxConnection];
564
+
565
+ flag = new boolean[maxConnection];
566
+
567
+ isr = new InputStreamReader[maxConnection];
568
+
569
+ in = new BufferedReader[maxConnection];
570
+
571
+ out = new PrintWriter[maxConnection];
572
+
573
+ myClientProcThread = new ClientProcThread[maxConnection];
574
+
575
+
576
+
577
+ int n = 1;
578
+
579
+ member = 0;//誰も接続していないのでメンバー数は0
580
+
581
+
582
+
583
+ try {
584
+
585
+ System.out.println("The server has launched!");
586
+
587
+ ServerSocket server = new ServerSocket(10000);//10000番ポートを利用する
588
+
589
+ while (true) {
590
+
591
+ incoming[n] = server.accept();
592
+
593
+ flag[n] = true;
594
+
595
+ System.out.println("Accept client No." + n);
596
+
597
+ //必要な入出力ストリームを作成する
598
+
599
+ isr[n] = new InputStreamReader(incoming[n].getInputStream());
600
+
601
+ in[n] = new BufferedReader(isr[n]);
602
+
603
+ out[n] = new PrintWriter(incoming[n].getOutputStream(), true);
604
+
605
+
606
+
607
+ myClientProcThread[n] = new ClientProcThread(n, incoming[n], isr[n], in[n], out[n]);//必要なパラメータを渡しスレッドを作成
608
+
609
+ myClientProcThread[n] .start();//スレッドを開始する
610
+
611
+ member = n;//メンバーの数を更新する
612
+
613
+ n++;
614
+
615
+ }
616
+
617
+ } catch (Exception e) {
618
+
619
+ System.err.println("ソケット作成時にエラーが発生しました: " + e);
620
+
621
+ }
622
+
623
+ }
624
+
625
+ }
626
+
407
627
 
408
628
 
409
629
 

2

コードの追加

2020/01/19 11:34

投稿

1236
1236

スコア19

test CHANGED
File without changes
test CHANGED
@@ -32,35 +32,385 @@
32
32
 
33
33
  ```java
34
34
 
35
- ソースコード
36
-
37
- ``` public void mouseDragged(MouseEvent e){ // マウスがドラッグされた時の処理
38
-
39
- System.out.println("マウスをドラッグ");
40
-
41
- px = x;
42
-
43
- py = y;
44
-
45
- x = e.getX();
46
-
47
- y = e.getY();
48
-
49
- System.out.println(px+", "+py+", "+x+", "+y);
50
-
51
-
52
-
53
- //送信情報を作成する(受信時には,この送った順番にデータを取り出す.スペースがデータの区切りとなる)
54
-
55
- String msg = px+" "+py+" "+x+" "+y;
56
-
57
-
58
-
59
- //サーバに情報を送る
60
-
61
- out.println(msg);//送信データをバッファに書き出す
62
-
63
- out.flush();//送信データをフラッシュ(ネットワーク上にはき出す)する
35
+ import java.net.*;
36
+
37
+ import java.io.*;
38
+
39
+ import javax.swing.*;
40
+
41
+ import java.lang.*;
42
+
43
+ import java.awt.*;
44
+
45
+ import java.awt.event.*;
46
+
47
+ import javax.swing.*;
48
+
49
+ import java.util.*;
50
+
51
+
52
+
53
+ public class MyClient4 extends JFrame {
54
+
55
+ private Container c;
56
+
57
+ PrintWriter out;//出力用のライター
58
+
59
+ MyCanvas2 mc;
60
+
61
+ int x, y; // mouse pointer position
62
+
63
+ int px, py; // preliminary position
64
+
65
+
66
+
67
+ public MyClient4() {
68
+
69
+ //名前の入力ダイアログを開く
70
+
71
+ String myName = JOptionPane.showInputDialog(null,"名前を入力してください","名前の入力",JOptionPane.QUESTION_MESSAGE);
72
+
73
+ if(myName.equals("")){
74
+
75
+ myName = "No name";//名前がないときは,"No name"とする
76
+
77
+ }
78
+
79
+
80
+
81
+ //ウィンドウを作成する
82
+
83
+ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//ウィンドウを閉じるときに,正しく閉じるように設定する
84
+
85
+ setTitle("DrawingApli");//ウィンドウのタイトルを設定する
86
+
87
+ setSize(500,500);//ウィンドウのサイズを設定する
88
+
89
+ c = getContentPane();//フレームのペインを取得する
90
+
91
+ mc = new MyCanvas2(this); // mc のオブジェクト(実体)を作成
92
+
93
+ this.setLayout(new BorderLayout(10, 10)); // レイアウト方法の指定
94
+
95
+ this.add(mc, BorderLayout.CENTER); // 左側に mc (キャンバス)を配置
96
+
97
+ this.setVisible(true); //可視化
98
+
99
+
100
+
101
+ //サーバに接続する
102
+
103
+ Socket socket = null;
104
+
105
+ try {
106
+
107
+ //"localhost"は,自分内部への接続.localhostを接続先のIP Address("133.42.155.201"形式)に設定すると他のPCのサーバと通信できる
108
+
109
+ //10000はポート番号.IP Addressで接続するPCを決めて,ポート番号でそのPC上動作するプログラムを特定する
110
+
111
+ socket = new Socket("localhost", 10000);
112
+
113
+ } catch (UnknownHostException e) {
114
+
115
+ System.err.println("ホストの IP アドレスが判定できません: " + e);
116
+
117
+ } catch (IOException e) {
118
+
119
+ System.err.println("エラーが発生しました: " + e);
120
+
121
+ }
122
+
123
+
124
+
125
+ MesgRecvThread mrt = new MesgRecvThread(socket, myName);//受信用のスレッドを作成する
126
+
127
+ mrt.start();//スレッドを動かす(Runが動く)
128
+
129
+ }
130
+
131
+
132
+
133
+ //メッセージ受信のためのスレッド
134
+
135
+ public class MesgRecvThread extends Thread {
136
+
137
+
138
+
139
+ Socket socket;
140
+
141
+ String myName;
142
+
143
+
144
+
145
+ public MesgRecvThread(Socket s, String n){
146
+
147
+ socket = s;
148
+
149
+ myName = n;
150
+
151
+ }
152
+
153
+
154
+
155
+ //通信状況を監視し,受信データによって動作する
156
+
157
+ public void run() {
158
+
159
+ try{
160
+
161
+
162
+
163
+ InputStreamReader sisr = new InputStreamReader(socket.getInputStream());
164
+
165
+ BufferedReader br = new BufferedReader(sisr);
166
+
167
+ out = new PrintWriter(socket.getOutputStream(), true);
168
+
169
+ out.println(myName);//接続の最初に名前を送る
170
+
171
+ while(true) {
172
+
173
+ String inputLine = br.readLine();//データを一行分だけ読み込んでみる
174
+
175
+ if (inputLine != null) {//読み込んだときにデータが読み込まれたかどうかをチェックする
176
+
177
+ System.out.println(inputLine);//デバッグ(動作確認用)にコンソールに出力する
178
+
179
+ String[] inputTokens = inputLine.split(" "); //入力データを解析するために、スペースで切り分ける
180
+
181
+ String cmd = inputTokens[0];//コマンドの取り出し.1つ目の要素を取り出す
182
+
183
+ int px = Integer.parseInt(inputTokens[0]);//数値に変換する
184
+
185
+ int py = Integer.parseInt(inputTokens[1]);//数値に変換する
186
+
187
+ int x = Integer.parseInt(inputTokens[2]);//数値に変換する
188
+
189
+ int y = Integer.parseInt(inputTokens[3]);//数値に変換する
190
+
191
+ mc.paint2(px, py, x, y);
192
+
193
+ }else{
194
+
195
+ break;
196
+
197
+ }
198
+
199
+ }
200
+
201
+ socket.close();
202
+
203
+ } catch (IOException e) {
204
+
205
+ System.err.println("エラーが発生しました: " + e);
206
+
207
+ }
208
+
209
+ }
210
+
211
+ }
212
+
213
+
214
+
215
+
216
+
217
+ public static void main(String[] args) {
218
+
219
+ MyClient4 net = new MyClient4();
220
+
221
+ net.setVisible(true);
222
+
223
+ }
224
+
225
+ }
226
+
227
+
228
+
229
+ class MyCanvas2 extends Canvas implements MouseListener, MouseMotionListener {
230
+
231
+ // ■ フィールド変数
232
+
233
+ int x, y; // mouse pointer position
234
+
235
+ int px, py; // preliminary position
236
+
237
+ int ow, oh; // width and height of the object
238
+
239
+ int mode; // drawing mode associated as below
240
+
241
+ Image img = null; // 仮の画用紙
242
+
243
+ Graphics gc = null; // 仮の画用紙用のペン
244
+
245
+ Dimension d; // キャンバスの大きさ取得用
246
+
247
+ PrintWriter out;//出力用のライター
248
+
249
+
250
+
251
+ // ■ コンストラクタ
252
+
253
+ MyCanvas2(MyClient4 obj){
254
+
255
+ this.setSize(500,500); // キャンバスのサイズを指定
256
+
257
+ setBackground(new Color(255, 255, 255));
258
+
259
+ addMouseListener(this); // マウスのボタンクリックなどを監視するよう指定
260
+
261
+ addMouseMotionListener(this); // マウスの動きを監視するよう指定
262
+
263
+ }
264
+
265
+
266
+
267
+ // ■ メソッド(オーバーライド)
268
+
269
+ // フレームに何らかの更新が行われた時の処理
270
+
271
+ public void update(Graphics g) {
272
+
273
+ paint(g); // 下記の paint を呼び出す
274
+
275
+ }
276
+
277
+
278
+
279
+ // ■ メソッド(オーバーライド)
280
+
281
+ public void paint(Graphics g) {
282
+
283
+ d = getSize(); // キャンバスのサイズを取得
284
+
285
+ if (img == null) // もし仮の画用紙の実体がまだ存在しなければ
286
+
287
+ img = createImage(d.width, d.height); // 作成
288
+
289
+ if (gc == null) // もし仮の画用紙用のペン (GC) がまだ存在しなければ
290
+
291
+ gc = img.getGraphics(); // 作成
292
+
293
+
294
+
295
+ paint2(px,py,x,y);
296
+
297
+ g.drawImage(img, 0, 0, this); // 仮の画用紙の内容を MyCanvas に描画
298
+
299
+ }
300
+
301
+
302
+
303
+ public void paint2(int px, int py, int x, int y){
304
+
305
+ gc.drawLine(px, py, x, y);
306
+
307
+ }
308
+
309
+
310
+
311
+
312
+
313
+ // ■ メソッド
314
+
315
+ // 下記のマウス関連のメソッドは,MouseListener をインターフェースとして実装しているため
316
+
317
+ // 例え使わなくても必ず実装しなければならない
318
+
319
+ public void mouseClicked(MouseEvent e){}// 今回は使わないが、無いとコンパイルエラー
320
+
321
+ public void mouseEntered(MouseEvent e){
322
+
323
+ //System.out.println("マウスが入った");
324
+
325
+ }// 今回は使わないが、無いとコンパイルエラー
326
+
327
+ public void mouseExited(MouseEvent e){
328
+
329
+ //System.out.println("マウス脱出");
330
+
331
+ } // 今回は使わないが、無いとコンパイルエラー
332
+
333
+ public void mousePressed(MouseEvent e){ // マウスボタンが押された時の処理
334
+
335
+ System.out.println("マウスを押した");
336
+
337
+ x = e.getX();
338
+
339
+ y = e.getY();
340
+
341
+ System.out.println(x+", "+y);
342
+
343
+
344
+
345
+ }
346
+
347
+ public void mouseReleased(MouseEvent e){ // マウスボタンが離された時の処理
348
+
349
+ System.out.println("マウスを放した");
350
+
351
+ }
352
+
353
+
354
+
355
+ // ■ メソッド
356
+
357
+ // 下記のマウス関連のメソッドは,MouseMotionListener をインターフェースとして実装しているため
358
+
359
+ // 例え使わなくても必ず実装しなければならない
360
+
361
+ public void mouseDragged(MouseEvent e){ // マウスがドラッグされた時の処理
362
+
363
+ System.out.println("マウスをドラッグ");
364
+
365
+ px = x;
366
+
367
+ py = y;
368
+
369
+ x = e.getX();
370
+
371
+ y = e.getY();
372
+
373
+ System.out.println(px+", "+py+", "+x+", "+y);
374
+
375
+
376
+
377
+ //送信情報を作成する(受信時には,この送った順番にデータを取り出す.スペースがデータの区切りとなる)
378
+
379
+ String msg = px+" "+py+" "+x+" "+y;
380
+
381
+
382
+
383
+ //サーバに情報を送る
384
+
385
+ out.println(msg);//送信データをバッファに書き出す
386
+
387
+ out.flush();//送信データをフラッシュ(ネットワーク上にはき出す)する
388
+
389
+
390
+
391
+ repaint(); // 再描画
392
+
393
+
394
+
395
+ }
396
+
397
+ public void mouseMoved(MouseEvent e){
398
+
399
+ //System.out.println("マウスをドラッグ");
400
+
401
+ } // 今回は使わないが、無いとコンパイルエラー
402
+
403
+
404
+
405
+ }
406
+
407
+
408
+
409
+
410
+
411
+
412
+
413
+ ```
64
414
 
65
415
 
66
416
 
@@ -72,8 +422,4 @@
72
422
 
73
423
  ### 補足情報(FW/ツールのバージョンなど)
74
424
 
75
- public class MyClient でソッケトやデータ受信を行い、 public class MyCanvas でマウスの判定や線の描画、座標の送信をしています。
76
-
77
- サーバの端末がnullをずっと受信しているので送信に問題があるのかと思いました。
78
-
79
425
  サーバとクライアントはこちらを参考にしました。https://yoslab.net/netprog/index.php?%B1%E9%BD%AC3-2%20%A5%CD%A5%C3%A5%C8%A5%EF%A1%BC%A5%AF%C2%D0%C0%EF%A5%B2%A1%BC%A5%E0%A5%AF%A5%E9%A5%A4%A5%A2%A5%F3%A5%C8

1

補足

2020/01/19 08:15

投稿

1236
1236

スコア19

test CHANGED
File without changes
test CHANGED
@@ -72,6 +72,8 @@
72
72
 
73
73
  ### 補足情報(FW/ツールのバージョンなど)
74
74
 
75
+ public class MyClient でソッケトやデータ受信を行い、 public class MyCanvas でマウスの判定や線の描画、座標の送信をしています。
75
76
 
77
+ サーバの端末がnullをずっと受信しているので送信に問題があるのかと思いました。
76
78
 
77
79
  サーバとクライアントはこちらを参考にしました。https://yoslab.net/netprog/index.php?%B1%E9%BD%AC3-2%20%A5%CD%A5%C3%A5%C8%A5%EF%A1%BC%A5%AF%C2%D0%C0%EF%A5%B2%A1%BC%A5%E0%A5%AF%A5%E9%A5%A4%A5%A2%A5%F3%A5%C8