3

まず、大きなバイト配列を送信するためのサーバーとクライアントの 2 つのプログラムを作成するつもりです。UDPclient および udpserver コンポーネントのテストを開始しました。それが正しい方法である場合、私はそうではありません。

プログラムの例を見つけましたが、それは古い Delphi バージョンでビルドされており、コンパイルするとエラーが発生します。

HostName.Caption := UDPServer.LocalName;
HostAddress.Caption := GStack.LocalAddress;
Port.Caption := IntToStr(UDPServer.DefaultPort);
BufferSize.Caption := IntToStr(UDPServer.BufferSize);
UDPServer.Active := True;

udpserver.localname古いバージョンにあったようです。ここで使用するプロパティを見つける必要があります。udpserver コンポーネントでホスト名を取得および書き込む方法。udpclient には Host プロパティがあり、正常に動作します。クライアント プログラムをコンパイルできました。

「localname」プロパティの代わりに何を置くべきか誰か助けてもらえますか

そして、大きなバイト配列を送信する別の方法を誰かにアドバイスしてもらえれば。そのサイズは約 120000 になります。毎分送信します

ありがとうございました

4

3 に答える 3

4

送信中のデータ破損を検出し、破損したパケットを再度要求できるため、TCP を使用することをお勧めします。検出は、 16 ビットのチェックサムに対してパケットをチェックすることによって行われます。これはエラーを検出するだけで、システムがエラーを修正することを許可しません。これは、データを再度要求する場所です。

Delphi に付属の Indy ソケット ライブラリを使用して TCP ソケットを作成するのがおそらく最も便利です。TIdTCPServer および TIdTCPClient コンポーネントはうまく機能するはずです。

ここで、Indy ライブラリの使用に関するデモをいくつか見つけることができます。

于 2012-06-03T17:19:54.660 に答える
1

GStack.HostNameLocalName古いプロパティの代わりです。

UDPはメッセージベースのトランスポートです。120000はバイト数が多すぎて、単一のUDPメッセージに収まりません。あなたはそれを小さな塊に分割しなければならないでしょう。UDPを使用して大量のデータを送信するには、TFTPなどのUDPベースの転送プロトコルの使用を検討してください。インディにはその目的のためのコンポーネントがTIdTrivialFTPあります。TIdTrivialFTP

それ以外の場合は、ストリームベースのトランスポートであるTCPに切り替えます。その後、必要なだけのデータを送信できます。

于 2012-06-04T23:34:51.447 に答える
0

ネットワーク経由で送信しようとしているデータによって異なります。ネットワーク経由でファイルを送信する場合は、サーバー側で受信したデータがクライアント側で送信されたものと同じになることが保証されるため、TCP プロトコルを使用する必要があります。送信したいデータが音声のように損失が多い場合 (途中やデータに遅延や損失があることは重要ではありません)、UDP プロトコルを使用できます。データの破損をチェックするためのオーバーヘッドがないため、非常に高速になります。UDP ではパケットやデータグラムが失われる可能性があるため、実際には接続がないため、UDP はコネクションレス プロトコルと呼ばれます。既知のすべてのプログラミング言語は、TCP および UDP 接続をサポートしていると思います。

于 2012-06-04T16:20:49.860 に答える