回答編集履歴

3

通信処理に補足説明

2022/07/17 18:32

投稿

KOZ6.0
KOZ6.0

スコア2626

test CHANGED
@@ -13,11 +13,12 @@
13
13
 
14
14
  ■ 通信処理 (BeginRead のコールバック関数内)
15
15
 
16
- (5) RDP クライアントから受信(EndRead)したら RDP サーバーに送信(NetworkStream.Write)
16
+ (5) RDP クライアントから受信したら RDP サーバーに送信
17
- (6) RDP サーバーから受信(EndRead)したら RDP クライアントに送信(NetworkStream.Write)
17
+ (6) RDP サーバーから受信したら RDP クライアントに送信
18
18
 
19
19
  (5),(6) は独立して動く必要があります。
20
20
  (非同期受信のメソッドを使えば自然にそうなります。送信は同期でOK)
21
+ EndRead → 受信データを送信バッファにコピー → 次の非同期受信開始(BeginRead) → 同期送信(Write)
21
22
 
22
23
  ■ 切断処理 (BeginRead のコールバック関数内)
23
24
 
@@ -25,7 +26,7 @@
25
26
  その場合は反対側の Socket オブジェクトを Shutdown(SocketShutdown.Send) します。
26
27
  Socket オブジェクトは TCPClient.Client プロパティで取り出せます。
27
28
 
28
- (7) RDP クライアントからゼロバイト受信したら RDP サーバー側を Shutdown。
29
+ (7) (5) でRDP クライアントからゼロバイト受信したら RDP サーバー側を Shutdown。
29
- (8) RDP サーバーからゼロバイト受信したら RDP クライアント側を Shutdown。
30
+ (8) (6) でRDP サーバーからゼロバイト受信したら RDP クライアント側を Shutdown。
30
31
  (9) 両方でゼロバイト受信が起きたら 両方の TCPClient を閉じて終了です。
31
32
 

2

初期処理について記述

2022/07/17 18:21

投稿

KOZ6.0
KOZ6.0

スコア2626

test CHANGED
@@ -1,21 +1,25 @@
1
1
  次のように作ってみてください。
2
2
 
3
- 接続処理
3
+ 初期処理
4
4
 
5
- (1) RDP クライアントからの接続を受け付ける
6
- (2) RDP サーバーに接続する
7
- (3) RDP クライアントからの非同期受信開始
5
+ (0) TcpListener のインスタンスを作成、開始(Start)を行い、クライアント接続待ちの非同期操作を開始(BeginAcceptTcpClient)。
8
- (4) RDP サーバーからの非同期受信開始
9
6
 
10
- 通信処理
7
+ 接続処理 (BeginAcceptTcpClient のコールバック関数内)
11
8
 
9
+ (1) RDP クライアントからの接続を受け付け (EndAcceptTcpClient) 、次のクライアント接続待ちの非同期操作を開始(BeginAcceptTcpClient)
10
+ (2) RDP サーバーに接続する (TCPClient のインスタンスを作成し、Connect)
11
+ (3) RDP クライアントからの非同期受信開始(NetworkStream.BeginRead)
12
+ (4) RDP サーバーからの非同期受信開始(NetworkStream.BeginRead)
13
+
14
+ ■ 通信処理 (BeginRead のコールバック関数内)
15
+
12
- (5) RDP クライアントから受信したら RDP サーバーに送信
16
+ (5) RDP クライアントから受信(EndRead)したら RDP サーバーに送信(NetworkStream.Write)
13
- (6) RDP サーバーから受信したら RDP クライアントに送信
17
+ (6) RDP サーバーから受信(EndRead)したら RDP クライアントに送信(NetworkStream.Write)
14
18
 
15
19
  (5),(6) は独立して動く必要があります。
16
20
  (非同期受信のメソッドを使えば自然にそうなります。送信は同期でOK)
17
21
 
18
- ■ 切断処理
22
+ ■ 切断処理 (BeginRead のコールバック関数内)
19
23
 
20
24
  相手側から切断されると、受信がゼロバイトで完了します、
21
25
  その場合は反対側の Socket オブジェクトを Shutdown(SocketShutdown.Send) します。

1

typo

2022/07/17 05:18

投稿

KOZ6.0
KOZ6.0

スコア2626

test CHANGED
@@ -3,7 +3,7 @@
3
3
  ■ 接続処理
4
4
 
5
5
  (1) RDP クライアントからの接続を受け付ける
6
- (2) RDO サーバーに接続する
6
+ (2) RDP サーバーに接続する
7
7
  (3) RDP クライアントからの非同期受信開始
8
8
  (4) RDP サーバーからの非同期受信開始
9
9