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

回答編集履歴

2

更に追記

2017/03/07 10:07

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -17,3 +17,13 @@
17
17
  ---
18
18
  【追記】
19
19
  回答を書いている間に質問の内容が書かれてました。フライングしてしまった。すいません。
20
+
21
+ ---
22
+ 【質問を読み直して】
23
+ ソースもざっとみました。バイナリー・データを送っているので、先に書いた「2. 特殊コード」方式を使うのは難しいですね。かと言って「1. タイムアウト」もタイマの制御が必要になるのでやはり難しいてす。
24
+
25
+ バイナリー・データを送らないように改造するのが、恐らく簡単です。
26
+ 今はint型を2バイトでそのまま送っていますが、例えば4ビットづつを8ビットへ拡張して4バイトで送ることが考えられます。4ビットの値が10未満ならオフセット0x30を加え、10以上ならオフセット0x41を加えるとASCIIコードでの16進数表現になります。そして、それを受信側でデコードすることがかのうです。
27
+ このような工夫をして送受信することで、例えばベーシック手順のSYNコードなどをペイロード中に発生しないようにします。
28
+
29
+ そして、送信側はパケット先頭にSYNコードを付加して送り、受信側はSYNコードを受信できるまでデータを1バイトづつ破棄することが考えられます。

1

追記

2017/03/07 10:06

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -12,4 +12,8 @@
12
12
  2. 特殊コード
13
13
  ペイロード内に記録しないコードを決めます。バケット先頭にそのようなコードの一つを割り当てます。
14
14
  例えば、よく使われる[ベーシック手順](http://software-engineering-lab.com/network/basic.html)はこの方式です。
15
- この方式はタイムアウトに頼らない点で優れています。ペイロードに使えない値を伝送できるようにするため、それなりの工夫(エスケープするなど)で高速化することもできます。
15
+ この方式はタイムアウトに頼らない点で優れています。ペイロードに使えない値を伝送できるようにするため、それなりの工夫(エスケープするなど)で高速化することもできます。
16
+
17
+ ---
18
+ 【追記】
19
+ 回答を書いている間に質問の内容が書かれてました。フライングしてしまった。すいません。