2011-11-10 10 views
0

私は生のソケットを初めて使っています。私は、rawソケットを使ってrawデータを1つ以上のファイルで送受信するサーバーとクライアントアプリケーションを作成したいと思います。各ファイルは、50バイトの1つ以上のデータセグメントを含み、各データセグメントは指定された区切り文字(すなわち、スペース、キャリッジリターンなど)を含むことができる。私のサーバの仕事はファイルから読み取り、各セグメントを一度に送信することである。各パケットは、MACアドレスのようなイーサネットヘッダのような従来のヘッダ情報のないデータのみを含むべきである(パケットは、パケットの長さおよび/または開始を示すためにパケットの前に何らかの形式のデータを含むことができ、パケットの終わりを示すために)。クライアントアプリケーションは単に ポートを聞いてデータを解析し、生データをファイルに書き込む必要があります。C/C++でサーバクライアントのrawソケットプログラムを書くのに助けてください。

私を案内してください。私は多くのrawソケットプログラムを見つけましたが、どれも明確ではありませんでした。もし誰かが私にしっかりとしたスタートを与えることができれば、それは素晴らしいことだろう。

+0

あなたが何を記述しているのかは分かりません。ポートをリッスンするには、TCPプロトコルが必要です。イーサネットヘッダーなしでデータを送信する場合、ルータはどのようにパケットをルーティングするのかを知っていますか?クライアントとサーバーの間でファイルを転送する場合、rawソケットは必要ありません。これにストリームソケットを使用するだけです。 – rushman

+0

先生、あなたは私のことを知りません。私は間に1台のルータでこれを行うために4〜5のノードを使用したいと思います。しかし、私の第一の目的は、シンプルなサーバーとクライアントを実行させることです。私はちょうどヘッダーにMACアドレスを入れて、パケットを送信しています。だから、受信機は私がどこから来たか知っている..... – Invictus

+0

まあ、私はまだそれを取得していない。たぶんそれは私が混乱している "各パケットは、イーサネットヘッダーなどの従来のヘッダー情報なしでのみデータを含む必要があります"と言うビットです。また、あなたがWindowsを見ているなら、rawソケット上のTCPは動作しません。私はまだこれのためにまったく生のソケットを使用したい理由はまだ分かりません。このようなクライアント/サーバーのものは、古典的なストリームソケットです。たぶんあなたはあなたの答えをもっと明確にすることができたので、本当に何をしようとしているのか分かりますか? – rushman

答えて

4

ここにはhttp://sock-raw.org/papers/sock_rawが表示されますが、あなたの言うことは本当に可能です。 実際、あなたのデータでは、ルーティング可能なプロトコルと一致するデータがあると仮定すると、パケットはルーティングされます。確かに、ドキュメントがあれば、Rawソケットはヘッダーとペイロードを処理します。あなたはヘッダーを持っていなければなりません(あなたの場合は、personnalヘッダーとヘッダー、justeペイロードの後に​​0で始まる必要があります)。そしておそらく、それは非常に基本的なルータ/スイッチで動作するかもしれませんが、ルータがデータを見て、これが破損したデータであると想像することができるので、今は難しいです。

関連する問題