2017-02-22 7 views
1

私はTCP/IPプロトコルが初めてで、C++でチャット用のサーバーを作成したいと考えています。TCPは印刷できない文字をサポートしていますか?

今のところ私は次のもの(ログイン要求、投稿するメッセージ、クライアントのユーザー名など)を伝える文字ですべての送信を開始することに決めました。

したがって、私は0x01、0x02、...などの値を、ログイン、情報要求、およびメッセージの0x10に関連するものに使用します。

私が作成した別のプログラムで自分のサーバーに接続しようとすると、サーバーから0x01で始まる1つの送信が受信されます(したがって、すべてはまだOKです)。しかし、0x03私はクライアントを殺すとサーバーはそれを受け取るだけです...

何か読んでいるとは言わない選択機能だと思います。

これは正常ですか?

もしそうなら、私はこの値を印刷可能で、特別な意味を持たない値で置き換えるべきですか?

+2

TCPは、印刷可能な文字でないかどうかにかかわらず、0〜255の値を持つため、バイトで処理しています。まったく別のものを選んでください。すべてヘッダー付きの1つのメッセージに入れてください。 –

+0

はい、TCPはバイナリデータに非常に満足しています。クライアントとサーバーの両方の関連セクションを共有してください/ –

+0

@ErikŠťastnýしかし、0-255の値でも動作しますか? – dido22

答えて

4

TCPは完全にバイナリプロトコルです。これは、IPデータグラムヘッダに続くパケットヘッダを定義する。連続したデータストリームはパケットに分割されるので、ストリームストリームは任意のオクテット(バイト)で構成されています。

メッセージ間の唯一の違いは、最初のバイト値、$01$03の間の違いですか?おそらく、メッセージのサイズは異なるでしょうか?おそらく1つのインスタンスがストリームをフラッシュするために何かをしますか?おそらく、メッセージはセッション上で順番に送信されていますか?

短く離散したメッセージをすばやく送信する必要がある場合、UDPは驚くほどの遅延を防ぐのに役立ちます。

+3

しかし、UDPは予期せぬパケット損失を引き起こすのを助けるかもしれません... – osgx

+0

@osgx UDPは再送メカニズムを持っていませんが、自分で追加することができます。 TCPには信頼できるフラッシュメカニズムがなく、回避策が失敗する傾向があります。あなたの毒を選ぶ。 – Potatoswatter

関連する問題