0

ここに示す概念を実装しました。http://wiki.unity3d.com/index.php/Simple_TCP/IP_Client_-_Serverユニティ外で動作します。(ただし、ベースプロジェクトがどこにも見つからなかったため、TCPIPServerAppを最初から作成する必要がありました)。

ただし、tcp/ip を適切に使用する方法についていくつか一般的な質問があります。tcp/ip 自体についていくつか調査しましたが、まだ少し混乱しています。

上記の方法を使用しても、メッセージ (res) が表示されるとは限りません。res に別のメッセージがあるかどうかを確認するために、すべての更新をチェックするだけです。複数のメッセージが送信され、プログラムが遅延するか何かが発生した場合、以前のパケットを見逃すことはありますか? 代わりに配列を作成して、最後の X メッセージを格納する必要がありますか?

データが受信されたことをどのように確認できますか? メッセージ ID を追加して、独自の ack をデータに組み込む必要がありますか?

接続をセットアップする前に、ポートが使用されているかどうかを確認する必要がありますか?

質問ばかりですみません。これは私にとってすべて新しいことですが、私はこれをとても楽しんでいます!

... 以下はすでにアントンによって回答されています, ありがとう

tcp は独自のパケット番号付けを使用して、パケットが反対側で正しい順序になるようにしているようです。パケットが失われた場合、後続のパケットは破棄されますか? それとも、この番号付けとパケットの順序付けは、複数のパケットに分割されたデータを処理するためだけのものですか?

TCP は、必要に応じてデータを自動的に複数のパケットに分割しますよね?

4

1 に答える 1

0

まず第一に、TCP はコネクション フル プロトコルであるため、セグメント (TCP レベルで呼び出されるデータ) を送信する前に、標準の TCP ハンドシェイクを使用してクライアントとサーバーが接続されます

そのため、クライアントが受信する各セグメントの後に、確認応答を返します。その後、サーバーは別のセグメントを送信します。実際には 1 つのセグメントを送信するのではなく、トラフィックを減らすために、サーバーは多くのセグメントを送信できます。しかし、考え方は今も同じです。ここでも、TCP は、クライアントが確認応答を送り返さない UDP と比較して、信頼できるプロトコルです。したがって、UDP の例は、各セグメントに依存しないシューティング ゲームです。誰もがゲームでいわゆるラグを見たことは間違いありません。

もちろん、TCP は ACK ID を使用して、セグメントが確認応答されたかどうかを確認します! しかし、すべてのセグメントを構築する方法も知っている必要があります。

ここでも、TCP がデータをどのようにセグメント化するかは多くの要因に依存し、最適な方法を見つけるのに十分なほどスマートです。たとえば、一部のネットワークには、特定のサイズよりも大きなパケットをブロックするファイアウォールがある場合があります。したがって、TCP セグメント サイズは異なる場合があります。

于 2013-11-09T03:10:55.053 に答える