-1

私はソケットプログラミングの初心者です。私は、tcpがストリームベースであるという事実を補うためのCコードの例を探しています。つまり、クライアントでの1つの送信がサーバーのrecvと等しくない場合があります。

次のようなクライアントからメッセージを送信するときに、どうすれば確認できますか:

strcpy(send_data, "Hello Server");
send(sock,send_data,strlen(send_data), 0);

サーバー側で正確に受信されます..

tcp はストリームベースであるため、メッセージが断片化される可能性があり、メッセージ全体を取得するにはサーバーで複数の recv 呼び出しが必要になる場合があることを知っています。

しかし、完全なメッセージが受信されるまでサーバーが受信し続けるようにするにはどうすればよいですか?

私はその背後にある理論を知っています.. Cで例を探しています(できればクライアント側とサーバー側の両方の完全なコード)

4

1 に答える 1

0

まず、プロトコルを作成します。常に C スタイルの文字列である場合は、NUL ターミネータを探すだけです。

次に、受信したデータを読み取ってバッファに入れます。次に、バッファを解析してターミネータを探し、データを処理し (アプリケーションにとっての意味は何でも)、バッファから削除します。

送信する各呼び出しで送信されるデータの量がわからないため、これも送信方法です。送信したいものをローカル メモリ バッファに入れ、send を呼び出し、ローカル バッファから実際に送信されたバイト数を削除します。

また、Stack Overflow はサンプル コードを教えてくれるように人々に求めるサイトではありません。それが Google です。あなたのコードを投稿し、人々にコードの何が問題なのかを見つけてもらう場所です。

于 2013-09-24T03:20:29.540 に答える