2

sendC ++で関数を呼び出した後、ソケットをフラッシュしようとしました。図書館
を利用しました。winsock2.h

送信メッセージの直後にデータを送信する必要がありますが、関数のようなflash関数が見つかりません。

デバイスにメッセージを送信しようとしていますが、メッセージを1つずつ受信する必要があります。
つまり、送信者に「MessageOne」と「MessageTwo」のような2つのメッセージを送信すると、受信者は別々ではない「MessageOneMessageTwo」を受信し、デバイスはコマンドを認識しません。

では、どうすればそれができますか?

4

5 に答える 5

6

受信側にメッセージを「1つずつ」受信させるために送信側でできることは何もありません。送信されたフレーム(「メッセージ」)を適切に再構築するのは、完全に受信側の責任です。受信コードは、何らかの方法でメッセージの長さを認識し(完全にプロトコル固有)、フレーム全体を構築するために適切な量のデータを受信する必要があります(通常、指定された長さで指定され、バッファ全体にのみ関係する指定されたrecvを投稿することで実現されます(フラグなど)) 。 。お使いのデバイスがこれを処理する方法を知らないと信じるのは非常に難しいと思います。実際にそうであれば、文字通り何もありません。MSG_WAITALLできるよ。デバイス/プロトコルの要件を理解しておらず、間違った質問をしている可能性が高いと思います。

于 2012-10-10T08:36:40.853 に答える
1

ソケットには「フラッシュ」機能はありません。2つのメッセージをすばやく連続して送信する必要がある場合は、それらを送信するだけです。TCPソケットの場合、正しい順序(送信した順序)で到着します。

このパターンは実際には珍しいことではありません。最初にメッセージヘッダーを送信し、次にメッセージデータを個別に送信します。

于 2012-10-10T08:15:07.273 に答える
0

私の知る限り、「フラッシュ」機能は実際にはありません。send関数は送信されたバイト数を返すため、すべてのバイトが送信されるまでループを繰り返すことができます。

編集:私が読んだものに追加するには、他のユーザーから欲しいものを追加します。「内部バッファ」を増やす(フラッシュすることはwinsockがそれ自体で行うことです)ことを私が知っている唯一の方法は、so_sendbufオプションを使用するsetsockoptです。

それに関連する記事:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms740476%28v=vs.85%29.aspx

于 2012-10-10T08:15:15.623 に答える
0

Winsock FAQの例を使用した、パケットスキームの質問に対する正確な回答

于 2012-10-10T08:26:05.380 に答える
0

送信側でソケットオプションをNDELAYに設定します

于 2016-02-18T14:56:19.627 に答える