winsock
でファイル(テキストまたはバイナリ)を送信したい、32768バイトサイズのバッファを持っている、もう一方のバッファサイズは同じですが、パケットサイズが< 32768だったら、どのようにバッファ内のパケットの終わりを判断するか知っているバイナリファイルでは、一意の文字でパケットの終わりをマークすることはできません、そこに任意のソリューション? thxwinsockを使用したファイル転送
答えて
固定サイズの「パケット」では、通常、最後のパケットを除くすべてのパケットが有効なデータでいっぱいになります。最後のものだけが「部分的」になり、受信者が何バイトのバイト数を知っていれば(Davitaの提案を使って、送信者がファイルサイズを事前に伝えていたので)、それは問題ありません。受信者は最後のパケットの残りの部分を無視することができます。
複数の部分的に完全なパケットが1つのファイル転送に関連付けられているように、詳細な説明が表示されます。同様に簡単な解決方法があります。それぞれパケットに有効なバイト数をプレフィックスとして付けます。
後でTCustomWinSocket.ReceiveText
に言及し、あなたはそれがテキストを読むことをどのくらい知っている、そしてあなたはそれを充填する前に結果バッファの長さを設定するReceiveBuf(Pointer(nul)^, -1))
を呼び出すことで答えを、引用どのように疑問に思います。たぶんあなたはそのコードが何をしているのか分からなかったでしょう。 と同じコードを別の文脈、つまりReceiveLength
の方法で見れば分かります。 ReceiveBuf
と同じ呼び出しを行い、-1をReceiveBuf
に渡すと、受け取ったバイト数を返します。
あなたの目的に合うように、固定サイズのパケットを送信することはできません。常に32KBのパケットを送信し、最後にゼロを埋め込むと、ReceiveLength
は常に32768を返し、ファイルとパケットの長さをペイロードと共に送信するDavitaと私のソリューションを組み合わせなければなりません。しかし、パケット内のすべてのバイトが常に有効であることを確認すると、受信者はパケットのサイズに基づいて保存する量を知ることができます。
送信者が送信者に受信者にジョブの実行に必要な情報を提供していることを確認する必要があります。受信者にゴミを有効なデータと区別させることなく、送信者がゴミを送信した場合、あなたは立ち往生しています。
ファイル転送を開始する前にいつでもファイルサイズを送信できるため、ファイルへの書き込みをいつ停止するかを知ることができます。
- 1. winsockによるファイル転送(C++)
- 2. WCFを使用したファイルの転送
- 3. vb.netを使用したftpファイル転送
- 4. SIPを使用したファイル転送
- 5. WCFを使用したSilverlightファイル転送
- 6. WindowsからSCPを使用したLinuxへのJenkinsファイル転送
- 7. JavaでP2P接続を使用したファイル転送
- 8. Apache CXFを使用したファイル転送Webサービス
- 9. XMPPフレームワークを使用したObjective Cでのファイル転送
- 10. SCpとClassic ASPを使用したCSVファイルの転送
- 11. tcpClientを使用したファイル転送の速度が遅い
- 12. smackを使用したアンドロイドファイル転送
- 13. CRTPを使用した転送コンストラクタ
- 14. ソケットを使用したポート転送
- 15. C++ Winsock APIを使用したPNGファイル(HTTP POST)のアップロード
- 16. Winsockを使用したRawイーサネットフレーム
- 17. .NET Remotingを使用してファイルを転送しますか?
- 18. Javaでソケットを介したファイル転送
- 19. ソケットを介したファイル転送
- 20. Androidインテントを使用したデータの転送とアプリケーションクラスのデータオブジェクトの転送
- 21. Winsock送受信します。
- 22. CFWriteStreamを使用してファイルをソケットに転送する
- 23. SFTPサーバーからJavaを使用してローカルシステムにファイルを転送
- 24. HTTP/POSTを使用して大きなファイルを転送する
- 25. Jschを使用してUnixからWinxpサーバにファイルを転送
- 26. コマンドを使用してサーバー間でファイルを転送する
- 27. コマンドラインでMSTSCを使用してファイルを転送する
- 28. AndroidアプリケーションでBluetoothを使用してファイルを転送する
- 29. SSHファイル転送プロトコル(SFTP)を使用してC#の
- 30. SDカードを使用しないAndroidファイル転送
私はそれを試してみると、送信側を変更せずに反対側でそれを判断する解決策を探していた – joe500
ああハングアップ、それを送信する前にパケットサイズを決定することはできませんSendBuffメソッドは送信後amuntsentを返しますパケット、また私は反対側のパケットをcpauterしようとし、パケットサイズが来るのを待っていたが、それはあまりにも複雑になり、可能でないようだ – joe500
Socket.ReciveTextはパケットサイズと実際のデータを決定するが、私は知らない方法=> 関数TCustomWinSocket.ReceiveText:文字列; begin SetLength(Result、ReceiveBuf(Pointer(nil)^、-1)); SetLength(Result、ReceiveBuf(Pointer(Result)^、Length(Result))); end; – joe500