回答編集履歴

2

更に追記

2017/03/07 10:07

投稿

Chironian
Chironian

スコア23272

test CHANGED
@@ -37,3 +37,23 @@
37
37
  回答を書いている間に質問の内容が書かれてました。フライングしてしまった。すいません。
38
38
 
39
39
 
40
+
41
+ ---
42
+
43
+ 【質問を読み直して】
44
+
45
+ ソースもざっとみました。バイナリー・データを送っているので、先に書いた「2. 特殊コード」方式を使うのは難しいですね。かと言って「1. タイムアウト」もタイマの制御が必要になるのでやはり難しいてす。
46
+
47
+
48
+
49
+ バイナリー・データを送らないように改造するのが、恐らく簡単です。
50
+
51
+ 今はint型を2バイトでそのまま送っていますが、例えば4ビットづつを8ビットへ拡張して4バイトで送ることが考えられます。4ビットの値が10未満ならオフセット0x30を加え、10以上ならオフセット0x41を加えるとASCIIコードでの16進数表現になります。そして、それを受信側でデコードすることがかのうです。
52
+
53
+ このような工夫をして送受信することで、例えばベーシック手順のSYNコードなどをペイロード中に発生しないようにします。
54
+
55
+
56
+
57
+ そして、送信側はパケット先頭にSYNコードを付加して送り、受信側はSYNコードを受信できるまでデータを1バイトづつ破棄することが考えられます。
58
+
59
+

1

追記

2017/03/07 10:06

投稿

Chironian
Chironian

スコア23272

test CHANGED
@@ -27,3 +27,13 @@
27
27
  例えば、よく使われる[ベーシック手順](http://software-engineering-lab.com/network/basic.html)はこの方式です。
28
28
 
29
29
  この方式はタイムアウトに頼らない点で優れています。ペイロードに使えない値を伝送できるようにするため、それなりの工夫(エスケープするなど)で高速化することもできます。
30
+
31
+
32
+
33
+ ---
34
+
35
+ 【追記】
36
+
37
+ 回答を書いている間に質問の内容が書かれてました。フライングしてしまった。すいません。
38
+
39
+