1

私のアプリケーションは、サーバー側とクライアント側の両方でファイル転送用のスレッドを作成します。現在、クライアント側で遅延戦術(単純なforループ)を使用しているため、クライアントでのスレッド作成はサーバーでのスレッド作成プロセスの後に行われます。

アプリは正常に動作します。しかし、これは醜いとは言わないまでも、粗雑です。サーバースレッドが開始されたことを認識するまでクライアントスレッドが開始されないようにするための技術的な方法を見つける必要があります。

サーバーからクライアントへのsend()を使用しようとしました。クライアントrecv()はサーバーの信号をブロックする必要がありますが、明らかにブロックしません。クライアントコンソールのメッセージは、サーバーによって接続が拒否されたことに関するものです。ヒントはありますか?

4

2 に答える 2

1

select()あなたが探しているものかもしれません:あなたはそれにソケットのセットを与え、そしてそれはこれらのソケットで何かが起こるまでブロックします(そしてあなたは永遠に待つことを避けるためにタイムアウトを提供することができます)。クライアント側でデータが受信されるまで待機し、受信されたものがサーバーからの正しいメッセージであることを確認するために
呼び出します。select()recv()

于 2012-12-28T13:42:42.617 に答える
0

コネクションレス型トランスポートを使用しているようです。この場合、ピンポンゲームをプレイすることをお勧めします。クライアントは、サーバーから「ピンポン」UDPパケットを受信するか、タイムアウトするまで、ループ内で(妥当な期間で)サーバーに「ピンポン」udpパケットを送信します。

于 2012-12-28T13:41:53.437 に答える