質問するログイン新規登録

質問編集履歴

3

訂正

2017/06/06 02:43

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -94,8 +94,6 @@
94
94
  //Receiveメソッドの呼び出し
95
95
  Receive(stream);
96
96
 
97
- // TCPクライアントを閉じる
98
-
99
97
  }
100
98
 
101
99
  // 短時間だけ待機

2

追加

2017/06/06 02:43

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -44,4 +44,85 @@
44
44
  調べてみると使い捨て???みたいな事が書いてありましたが私にはよくわかりませんでした。
45
45
 
46
46
  以上、どうすれば2回目以降も送受信ができるのか教えてください。
47
- よろしくお願いいたします。
47
+ よろしくお願いいたします。
48
+
49
+ サーバーのコードです。(今回必要と思う箇所だけ抜粋)
50
+ ```C#
51
+ //// 接続待ち開始ボタンのクリックイベント
52
+ private void button1_Click(object sender, EventArgs e)
53
+ {
54
+ if (SLTAlive == false)
55
+ {
56
+ // スレッド終了指示フラグを未終了に設定
57
+ SLTAlive = true;
58
+
59
+ // 接続待ち用スレッドを作成
60
+ ListeningCallbackThread =new Thread(Start);
61
+
62
+ // 接続待ち用スレッドを開始
63
+ ListeningCallbackThread.Start();
64
+
65
+ }
66
+ }
67
+
68
+
69
+ //=========================================
70
+
71
+ //接続要求受け入れ開始
72
+ public void Start()
73
+ {
74
+
75
+ // 接続要求受け入れ開始
76
+ server.Start();
77
+ form.label1.Text = "サーバー開始";
78
+
79
+ try
80
+ {
81
+ // 受信の受付を行なうための無限ループ
82
+
83
+ while (form.SLTAlive == true) // スレッド終了指示フラグでの終了指示がある場合はループ終了
84
+ {
85
+ // 受信接続キュー内で、接続待ちがあるか判断
86
+ if (server.Pending() == true)
87
+ {
88
+ // クライアントからの接続を受け付ける
89
+ TcpClient ClientSocket = server.AcceptTcpClient();
90
+
91
+ // 通信ストリームの取得
92
+ NetworkStream stream = ClientSocket.GetStream();
93
+
94
+ //Receiveメソッドの呼び出し
95
+ Receive(stream);
96
+
97
+ // TCPクライアントを閉じる
98
+
99
+ }
100
+
101
+ // 短時間だけ待機
102
+
103
+ Thread.Sleep(100);
104
+
105
+ }
106
+ }
107
+ catch (Exception ex)
108
+ {
109
+ form.label1.Text = "サーバー終了";
110
+ }
111
+
112
+ }
113
+
114
+ //=========================================
115
+
116
+ //クライアントからの受信
117
+ public void Receive(NetworkStream stream)
118
+ {
119
+ // クライアントからの電文の受信
120
+ byte[] ReceiveDate = new byte[2000];
121
+ stream.Read(ReceiveDate, 0, ReceiveDate.Length);
122
+
123
+ string str = new string(Encoding.Unicode.GetString(ReceiveDate, 0, ReceiveDate.Length).ToCharArray()); //オブジェクトの生成
124
+ str = str.TrimEnd("\0".ToCharArray());
125
+
126
+ ・・・以下省略・・・
127
+ }
128
+ ```

1

訂正

2017/06/06 02:42

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -12,6 +12,7 @@
12
12
  ```
13
13
  のようにTcpClientをnewしてIPアドレスの指定をしてソケットをClose()していました。
14
14
  サーバー側は、接続を受け付けて、クライアントから文字の受信が終わればソケットをClose()としていました。
15
+ その後、無限ループでまた接続を受け付け→処理→Close()の繰り返しです。
15
16
  これでは何度も同じ作業をすることになるので、クライアントのTcpClientのnewとIPアドレスの指定を一度だけして2回目以降は文字の送受信だけを行いたいと思い、下記のようにしてみました。
16
17
 
17
18
  ```C#