回答編集履歴

4

ループの終了条件について追加

2022/06/29 06:28

投稿

KOZ6.0
KOZ6.0

スコア2626

test CHANGED
@@ -6,3 +6,12 @@
6
6
  もまずいですね。先頭1バイトしか変換していない。
7
7
 
8
8
  いっそのこと SendAndRecieve の戻り値は string にして、return enc.GetStriing(ms.ToAray(), 0, ms.Length - 1); としたほうがよさそう。
9
+
10
+ while (netstream.DataAvailable || resBytes[resSize - 1] != '\n');
11
+ も、まずいです。
12
+ メッセージが長くなり、複数のパケットに分割されると、すべてのデータを受信する前に DataAvailable プロパティが False になり、ループを抜けてしまいます。
13
+ while (resSize > 0 && resBytes[resSize - 1] != '\n');
14
+ として、デリミタを受信するまでループしてください。(通信仕様がわからないのでデリミタが '\n' でいいかは不明)
15
+
16
+
17
+

3

最後の1バイトを除く

2022/06/26 07:57

投稿

KOZ6.0
KOZ6.0

スコア2626

test CHANGED
@@ -5,4 +5,4 @@
5
5
  string b = Encoding.ASCII.GetString(byteRecieveMessage, 0, 1);
6
6
  もまずいですね。先頭1バイトしか変換していない。
7
7
 
8
- いっそのこと SendAndRecieve の戻り値は string にして、return enc.GetStriing(ms.ToAray()); としたほうがよさそう。
8
+ いっそのこと SendAndRecieve の戻り値は string にして、return enc.GetStriing(ms.ToAray(), 0, ms.Length - 1); としたほうがよさそう。

2

enc → enc.GetString

2022/06/26 07:51

投稿

KOZ6.0
KOZ6.0

スコア2626

test CHANGED
@@ -5,4 +5,4 @@
5
5
  string b = Encoding.ASCII.GetString(byteRecieveMessage, 0, 1);
6
6
  もまずいですね。先頭1バイトしか変換していない。
7
7
 
8
- いっそのこと SendAndRecieve の戻り値は string にして、return enc(ms.ToAray()); としたほうがよさそう。
8
+ いっそのこと SendAndRecieve の戻り値は string にして、return enc.GetStriing(ms.ToAray()); としたほうがよさそう。

1

他にもまずそうな点があった

2022/06/26 07:50

投稿

KOZ6.0
KOZ6.0

スコア2626

test CHANGED
@@ -2,3 +2,7 @@
2
2
  せっかく受信した内容を MemoryStream に書き込んでいるのに、return resBytes と、最後に受信したバッファの内容を返しています。
3
3
  ここは、return ms.ToArray(); が正しいのでは?
4
4
 
5
+ string b = Encoding.ASCII.GetString(byteRecieveMessage, 0, 1);
6
+ もまずいですね。先頭1バイトしか変換していない。
7
+
8
+ いっそのこと SendAndRecieve の戻り値は string にして、return enc(ms.ToAray()); としたほうがよさそう。